скрипт для поиска заданной строки и замены во всех файлах в заданном каталоге - PullRequest
1 голос
/ 03 июня 2011

Как написать скрипт в powershell, который находит данную строку во всех файлах в данном каталоге и заменяет ее на данный второй?

спасибо за любую помощь, прощай

Ответы [ 3 ]

1 голос
/ 03 июня 2011

Может быть, что-то вроде этого

    $files = Get-ChildItem "DirectoryContainingFiles"
    foreach ($file in $files) 
    {
    $content = Get-Content -path $file.fullname
    $content | foreach {$_ -replace "toreplace", "replacewith"} | 
Set-Content $file.fullname
    }
1 голос
/ 03 июня 2011

Если строка для замены занимает несколько строк, то использование Get-Content не приведет к ее обрезанию, если вы не объедините выходные данные Get-Content в одну строку.В этом случае проще использовать [io.file] :: ReadAllText (), например:

Get-ChildItem | Where {!$_.PSIsContainer} | 
    Foreach { $txt = [IO.File]::ReadAllText($_.fullname); 
              $txt -replace $old,$new; $txt | Out-File $_}

Обратите внимание, что с $ old вам может потребоваться использовать директиву регулярных выражений, например '(? S)' вначало, указывающее, что . также соответствует символам новой строки.

0 голосов
/ 03 июня 2011

Я считаю, что вы можете получить список всех файлов в каталоге (просто?). Теперь приходит запасная часть. Вот как вы можете сделать это с помощью Power Shell:

type somefile.txt | %{$_ -replace "string_to_be_replaces","new_strings"}

Измените его в соответствии с вашими потребностями. Вы также можете перенаправить вывод в новый файл так же, как вы делаете другое перенаправление (используя: >).

Чтобы получить список файлов, используйте:

Get-ChildItem <DIR_PATH> -name

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...