Как найти и заменить содержимое файла в PowerShell? - PullRequest
1 голос
/ 28 января 2020

Мне нужно найти текст в файле, например:

PolicyFile=$(SrcRoot)BeHttp

и заменить его следующим:

PolicyFile=$(SrcRoot)PPCore/BeHttp

Итак, я написал следующий скрипт, но он не работает.

Get-ChildItem 'D:\SomeFolder\\*.MKE' -Recurse | ForEach {
     (Get-Content $_ | ForEach  {   
       $_  -replace "PolicyFile=$(SrcRoot)BeHttp", "PolicyFile=$(SrcRoot)PPCore//BeHttp"
     }) | Set-Content $_
}

1 Ответ

1 голос
/ 28 января 2020

Вы хотите экранировать символы, которые PowerShell считает зарезервированными. Также при использовании Get-Content вам необходимо указать полный путь. Этот путь доступен в разделе Полное имя дочернего элемента (Get-ChildItem).

Get-ChildItem 'D:\SomeFolder\*.MKE' -Recurse | ForEach { 
        (Get-Content $_.FullName) -replace 'PolicyFile=\$\(SrcRoot\)BeHttp', 'PolicyFile=$(SrcRoot)PPCore//BeHttp' | Set-Content $_.FullName }

Чтобы избежать $ (), используйте \. Кроме того, вам не нужно использовать For-Each для строки, полученной из Get-Content.

Обновление:

При запуске Get-ChildItem я вижу все файлы из всех подпапок.

PS C:\Users\zx18421> Get-ChildItem 'C:\Temp\*.MKE' -Recurse | % { $_.FullName}
C:\Temp\1\new.mke
C:\Temp\2\3\new.mke
C:\Temp\2\new.mke
C:\Temp\new.mke
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...