[решено] Замена строчки в bat файле на несколько других

Ответить
Аватара пользователя
ZeroCrash

[решено] Замена строчки в bat файле на несколько других

Сообщение ZeroCrash »

Вот код скрипта, который заменяет одну строчку батника на другую (по вашему усмотрению):





Код:

Код: Выделить всё

#Include 
$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 строчки....подскажите что нужно подправить в скрипте, чтобы он стал способен на это?

Заранее благодарен!
Аватара пользователя
amel27

Re: [решено] Замена строчки в bat файле на несколько других

Сообщение amel27 »

ZeroCrash,



- у тебя замена не строки, а "фразы", которая может быть частью строки;

- формулируй точней: ЧТО (точное условие) и ЧЕМ заменить
Аватара пользователя
ZeroCrash

Re: [решено] Замена строчки в bat файле на несколько других

Сообщение ZeroCrash »

Заменить надо именно строку.



Допустим надо заменить

chcp 1251

на

echo ------------------------------------------->>%randomValue%.txt

echo ------------------------------------------->>%randomValue%.txt

echo ------------------------------------------->>%randomValue%.txt
Аватара пользователя
amel27

Re: [решено] Замена строчки в bat файле на несколько других

Сообщение amel27 »

ZeroCrash, вариант для "правильных" файлов (все строки заканчиваются на CRLF)



Код:

Код: Выделить всё

#Include 
$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
Аватара пользователя
amel27

Re: [решено] Замена строчки в bat файле на несколько других

Сообщение amel27 »

при отладке не мог понять, почему такой простой скрипт не всегда работает - оказалось, глючил текстовый редактор FAR - проставлял один CR вместо CRLF, на этот случай сваял команду "нормализации" текстового файла - все непарные CR/LF заменяются на корректную пару (можно вставлять в скрипт для надежности):



Код:

Код: Выделить всё

$sText = StringRegExpReplace ($sText, "(?:\r\n|[\r\n])", @CRLF)
Ответить

Вернуться в «AutoIt»