-
AutoIt
(
http://forum.oszone.net/forumdisplay.php?f=103)
Замена строчки в bat файле на несколько других
Вот код скрипта, который заменяет одну строчку батника на другую (по вашему усмотрению):
Код:
#Include <File.au3>
$FileList = _FileListToArray(@ScriptDir, "*.bat",1);создаём массив со списком всех bat файлов.
For $i = 1 to $FileList[0]; крутим цикл, столько раз, сколько у нас файлов
$File = FileOpen (@ScriptDir&"\"&$FileList[$i], 0);открыть для чтения
$File_text = FileRead ($File);читаем файл
FileClose ($File);закрываем
;Заменяем в тексте искомую строку на нашу
$File_new_text = StringReplace ($File_text, "искомая строка", "на которую нужно заменить")
$File = FileOpen (@ScriptDir&"\"&$FileList[$i], 2);открыть для записи и удалить имеющееся содержание
FileWrite ($File, $File_new_text); пишем изменённый текст в файл
FileClose ($File);закрываем
Next
MsgBox(0,"Сообщение","Операция завершена")
Но у меня возникла потребность заменить 1 строчку батника на 3 строчки....подскажите что нужно подправить в скрипте, чтобы он стал способен на это?
Заранее благодарен!
|
ZeroCrash,
- у тебя замена не строки, а "фразы", которая может быть частью строки;
- формулируй точней: ЧТО (точное условие) и ЧЕМ заменить
|
Заменить надо именно строку.
Допустим надо заменить
chcp 1251
на
echo ------------------------------------------->>%randomValue%.txt
echo ------------------------------------------->>%randomValue%.txt
echo ------------------------------------------->>%randomValue%.txt
|
ZeroCrash, вариант для "правильных" файлов (все строки заканчиваются на CRLF)
Код:
#Include <File.au3>
$sFrom = "chcp 1251"
$sTo = "echo ------------------------------------------->>%randomValue%.txt" &@CRLF& _
"echo ------------------------------------------->>%randomValue%.txt" &@CRLF& _
"echo ------------------------------------------->>%randomValue%.txt"
$FileList = _FileListToArray(@ScriptDir, "*.cmd", 1) ; создаём массив со списком всех bat файлов.
For $i=1 to $FileList[0] ; крутим цикл, столько раз, сколько у нас файлов
$r = _FileLinesReplace(@ScriptDir&"\"& $FileList[$i], $sFrom, $sTo)
ConsoleWrite("Обработан файл: "& $FileList[$i] &" произведено замен: "& $r &@CRLF)
Next
; -----------------------------------------
; Пользовательская функция (UDF)
; Замена в файле $sFile строки
; с текстом $sFrom на строку/строки $sTo
; -----------------------------------------
Func _FileLinesReplace($sFile, $sFrom, $sTo)
Local $sText, $hFile, $iRepl
$sFrom = @CRLF& $sFrom
$sTo = @CRLF& $sTo
$sText = @CRLF& FileRead($sFile)
$hFile = FileOpen (@ScriptDir&"\"&$FileList[$i], 2)
$sText = StringReplace($sText, $sFrom, $sTo)
$iRepl = @extended
$sText = StringTrimLeft($sText, 2)
FileWrite ($hFile, $sText)
FileClose ($hFile)
Return $iRepl
EndFunc ; ==> _FileLinesReplace
|
при отладке не мог понять, почему такой простой скрипт не всегда работает - оказалось, глючил текстовый редактор FAR - проставлял один CR вместо CRLF, на этот случай сваял команду "нормализации" текстового файла - все непарные CR/LF заменяются на корректную пару (можно вставлять в скрипт для надежности):
Код:
$sText = StringRegExpReplace ($sText, "(?:\r\n|[\r\n])", @CRLF)
|
Время: 06:07.
© OSzone.net 2001-