Как найти и заменить текст в файле, используя среду командной строки Windows? - PullRequest
437 голосов
/ 13 сентября 2008

Я пишу сценарий пакетного файла, используя среду командной строки Windows, и хочу заменить каждое вхождение одного текста в файле (например, «FOO») другим (например, «BAR»). Какой самый простой способ сделать это? Есть встроенные функции?

Ответы [ 27 ]

2 голосов
/ 17 апреля 2018

Использование powershell в .bat - для Windows 7 +

кодировка utf8 необязательна, подходит для веб-сайтов

@echo off
set ffile='myfile.txt'
set fold='FOO'
set fnew='BAR'
powershell -Command "(gc %ffile%) -replace %fold%, %fnew% | Out-File %ffile% -encoding utf8"
2 голосов
/ 16 июня 2017

@ Рэйчел дала отличный ответ, но здесь есть вариант, чтобы прочитать содержимое в переменную powershell $data. Затем вы можете легко манипулировать контентом несколько раз перед записью в выходной файл. Также посмотрите, как многострочные значения приведены в пакетных файлах .bat.

@REM ASCII=7bit ascii(no bom), UTF8=with bom marker
set cmd=^
  $old = '\$Param1\$'; ^
  $new = 'Value1'; ^
  [string[]]$data = Get-Content 'datafile.txt'; ^
  $data = $data -replace $old, $new; ^
  out-file -InputObject $data -encoding UTF8 -filepath 'datafile.txt';
powershell -NoLogo -Noninteractive -InputFormat none -Command "%cmd%"
2 голосов
/ 17 сентября 2008

Это единственное, что пакетные сценарии просто не очень хорошо.

Сценарий morechilli , на который ссылаются, будет работать для некоторых файлов, но, к сожалению, он будет подавлять те, которые содержат символы, такие как трубы и амперсанды.

VBScript - лучший встроенный инструмент для этой задачи. Смотрите эту статью для примера: http://www.microsoft.com/technet/scriptcenter/resources/qanda/feb05/hey0208.mspx

1 голос
/ 13 апреля 2019

Я предпочитаю использовать sed из утилит GNU для Win32 , необходимо отметить следующее

  • одинарная кавычка '' не будет работать в Windows, используйте "" вместо
  • sed -i не будет работать в Windows, для этого потребуется файл swapping

Таким образом, рабочий код sed для поиска и замены текста в файле в Windows такой, как показано ниже

sed -e "s/foo/bar/g" test.txt > tmp.txt && mv tmp.txt test.txt
0 голосов
/ 05 апреля 2018

Также можно увидеть инструменты Replace и ReplaceFilter на https://zoomicon.github.io/tranXform/ (источник включен). Второй - это фильтр.

Инструмент, который заменяет строки в файлах, находится в VBScript (для работы в старых версиях Windows требуется Windows Script Host [WSH])

Фильтр, вероятно, не работает с Unicode, если вы не перекомпилируете с последней версией Delphi (или с FreePascal / Lazarus)

0 голосов
/ 13 сентября 2008

Скачать Cygwin (бесплатно) и использовать Unix-подобные команды в командной строке Windows.

Ваша лучшая ставка: sed

0 голосов
/ 25 марта 2015

Я сталкивался с этой проблемой несколько раз при кодировании под Visual C ++. Если у вас есть, вы можете использовать Visual Studio Find and Replace Utility. Он позволяет вам выбрать папку и заменить содержимое любого файла в этой папке любым другим текстом, который вам нужен.

Под Visual Studio: Правка -> Найти и заменить В открывшемся диалоговом окне выберите папку и заполните поля «Найти что» и «Заменить на». Надеюсь, это будет полезно.

...