Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах

Модерирует : KLASS, IFkO

vu1tur (14-11-2006 16:59): http://forum.ru-board.com/topic.cgi?forum=62&topic=9040  Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

   

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 можно использовать теже переменные что и были использованы в других местах батника, не боясь перезатереть изх значения. эти команды определяют видимсоть переменных - т.е. переменные определенные в этом фрагменте не видны за пределами его и наоборот

Всего записей: 55 | Зарегистр. 07-12-2005 | Отправлено: 11:58 07-04-2006
   

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах
vu1tur (14-11-2006 16:59): http://forum.ru-board.com/topic.cgi?forum=62&topic=9040


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru