Если возможно, я бы настоятельно рекомендовал использовать PowerShell для выполнения этой задачи.Вот что нужно сделать, чтобы выполнить то, что вам нужно:
Get-ChildItem -Recurse -Filter *.csproj -Path YOUR_TARGET_ROOT_DIRECTORY_HERE |
ForEach-Object {
(Get-Content $_.FullName) |
ForEach-Object {
$_.Replace('<HintPath>c:\xx\yy\q.dll</HintPath>', '<HintPath>P:\q.dll</HintPath>')
} |
Set-Content $_.FullName -WhatIf
}
Примечание: я включил -WhatIf-переключатель , который не позволяет сценарию вносить какие-либо изменения, а просто выводит действияон будет работать в окне консоли.Удалите его, чтобы сделать скрипт работоспособным.
ОБНОВЛЕНИЕ
Чтобы заменить все возможные HintPath ссылку на q.dll
в пределах C:, на любой возможной глубине каталога вы можете заменить эту строку:
$_.Replace('<HintPath>c:\xx\yy\q.dll</HintPath>', '<HintPath>P:\q.dll</HintPath>')
на эту:
$_ -replace '\<HintPath\>C:\\.*\\q.dll\</HintPath\>', '<HintPath>P:\q.dll</HintPath>'