jak_forest
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору коментарии лучше поудалять в самом бтнике, могут возникнуть траблы на пустом месте Код: ; коментарии начинаются с тчк+зпт и идут следом за коментируемой строкой del /q /s file1.txt > nul 2>&1 ;удаляем на всякий случай выходной файл. ;> nul 2>&1 нужно для того что бы небыло на экране никаких сообщений об ошибках for /f %%i in (file.txt) do call :L1 %%i ;для каждой строки из указанного файла переходим на метку L1 с передачей всей строки ;если в строке есть пробелы, то заключи %1 в двойные кавычки а после метки L1 ;замени set L=%1 на set L=%~1 goto :eof ;выходим из программы сразу после перебора всех строк :L1 ;это метка для перехода на нее из любого места ;сюда попадаем для разбора каждой строки во входном файле. ;в данном случае из-за того что переходили на етку с помощью ;call :L1 строка ;%1 содержит всю строку set L=%1 ;в переменную L заносим всю строку echo %L%>> file1.txt ;выводим строку в выходной файл for /f "delims== tokens=1,*" %%j in (%L%) do ( ; ЭТОТ КОМЕНТАРИЙ В БАТНИКЕ НЕ ОСТАВЛЯЙ - ПРОВЕРЕННО ЭТО ГРАБЛЯ ;разбиваем строку назодящююся в L на 2 части (tokens=1,*). ;разделителем служит = (delims==). ;Первая часть помещается в %%j, ;вторая и последующие в переменные по порядку: k, l, m, ... пока есть что помещать if "%%k"="program_second" call :L2 %%j ;ну если после знака = в исходной строке идет то на что мы реагируем, то переходим на ;метку L2 ;сюда, между двумя круглыми скобками, можно накидать несколько разных сравнений ;и соответственно переходов на разные метки ) goto :eof ;если метка была вызвана с помощью CALL, то возвращаемся туда, откуда вызвали ;в противном случае выходим из батника вообще. :L2 ;аналогично :L1 set M=%1 ;в М запоминаем входной параметр set M=%M:3% ;в М записываем то что находится в М после третьего символа ;т.е. из cmd1234 получим в М 1234 echo cmd_new%M%=command>> file1.txt ;выводимм в выходной файл все что нам надо с учетом того что в M у нас есть номер goto :eof ;см. выше по аналогии | если будет несколько сравнений, и несколько меток аналогичных L2 то можно внутри исползовать вот такое финт Код: :L2 setlocal ... endlocal goto :eof | внутри setocal - endlocal можно использовать теже переменные что и были использованы в других местах батника, не боясь перезатереть изх значения. эти команды определяют видимсоть переменных - т.е. переменные определенные в этом фрагменте не видны за пределами его и наоборот |