Задача замены строки или её части в текстовом файле в командной строке или в bat файле может быть решена различными способами, в зависимости от требований.

Варианты замены текста из командной строки

Утилита поиска и замены текста

Специализированный инструмент всегда даёт самый функциональный и быстрый для реализации способ: готовые утилиты поддерживают все кодировки файлов, имеют опции для разных вариантов замены, поддерживают регулярные выражения и не требуют отладки!

Единственная ситуация, когда вариант с готовой утилитой может не подойти – если есть непреодолимое требование не использовать нестандартные (не входящие в состав Windows) компоненты при развёртывании на большое число корпоративных компьютеров. Но такое встречается нечасто.

Поэтому применение готового, отлаженного и протестированного инструмента является предпочтительным вариантом!

Скрипт на JS или VBS

Возможности VBScript/JScript позволяют реализовать различные варианты замены, включая поддержку регулярных выражений, но всё-таки имеют ограниченные возможности: поддержку меньшего числа кодировок файлов, отсутствие массовой замены, отсутствие подкаталогов и т.д. Любое изменение необходимо отлаживать и тестировать. В общем, очередной «велосипед».

Вариант со скриптом оптимально использовать в случае, когда по каким-то причинам нельзя использовать готовую утилиту.

Bat файлы

О серьёзных возможностях программирования bat файлов говорить не приходится – собственно, bat файл потому и называется пакетным файлом, что предназначен для запуска списка команд по очереди, а не для программирования циклов и обработки переменных.

Сильные стороны bat файлов – удобная форма запуска команд по списку, простое перенаправление вывода и использование переменных окружения, но лучше в bat файлах не программировать.

Ладно раньше, когда предустановленной альтернативы не было, но сейчас, когда на всех компьютерах есть WSH с VBScript/JScript и PowerShell…

Замена текста в файле скриптом JScript

Чтобы сделать замену текста в текстовом файле, в том числе, с использованием регулярных выражений, можно использовать следующий скрипт JScript, который:

  • открывает указанный текстовый файл
  • читает его построчно
  • для каждой строки выполняет замену по регулярному выражению

 

Код скрипта замены текста

// Имя файла, искомый текст и текст замены берём из аргументов
var file_name = WScript.Arguments(0);
var text_sample = WScript.Arguments(1);
var text_replace = WScript.Arguments(2);

var fso=WScript.CreateObject("Scripting.FileSystemObject");
// Переносим исходный файл во временный
var file_name_tmp = file_name+".tmp";
if (fso.FileExists(file_name_tmp))
    fso.DeleteFile(file_name_tmp);
fso.MoveFile(file_name,file_name_tmp);

var fo = fso.OpenTextFile(file_name_tmp,1,false,false);
var fr = fso.OpenTextFile(file_name,2,true,false);

// Выполняем замену текста, с построчной обработкой
var re=new RegExp(text_sample);

while (!fo.AtEndOfStream) {
    var line = fo.ReadLine();
    var line_replace = line.replace(re,text_replace);
    fr.WriteLine(line_replace);
}
fo.Close();
fr.Close();
// Удаляем временный файл
fso.DeleteFile(file_name_tmp);

Запуск скрипта замены текста

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

cscript //nologo replace_text.js content.txt Foo Bar

Примечания к скрипту

Скрипт обрабатывает файлы в ANSI кодировке. Для Unicode файла необходимо заменить 4-й аргумент в вызовах OpenTextFile c false на true.

Поскольку обработка ведётся по строкам, то регулярные выражения сработают только в пределах одной строки.

Примеры использования скрипта replace-text-script-samples.zip

Замена текста программой nhrt

Больше возможностей и гибкости: поддержка всех кодировок файлов с автоматическим определением, пакетная обработка и многое другое в программе nhrt.

Скрипт замены текста в файле
Метки:    

Добавить комментарий

Ваш адрес email не будет опубликован.