Интерпретатор CMD
Управление в пакетных файлах Параметры Переходы Условия Циклы
Использование параметров командной строки Для доступа из командного файла к параметрам командной строки применяются символы %0, %1, …, %9 или OFF CLS ECHO Файл %0 копирует каталог %1 в %2 XCOPY %1 %2 /S Запуск aaa.bat C:\Programs D:\Backup
Операторы для заменяемых параметров Операторы Описание %~Fn Переменная %n расширяется до полного имени файла %~Dn Из переменной %n выделяется только имя диска %~Pn Из переменной %n выделяется только путь к файлу %~Nn Из переменной %n выделяется только имя файла %~Xn Из переменной %n выделяется расширение имени файла %~$PATH:n Проводится поиск по каталогам, заданным в переменной среды PATH, и переменная %n заменяется на полное имя первого найденного файла. Если переменная PATH не определена или в результате поиска не найден ни один файл, эта конструкция заменяется на пустую строку.
Пример Пусть мы находимся в папке С:\TEMP, а значение параметра %1=Техт.doc Тогда: %~F1=C:\TEMP\Техт.doc %~D1=C: %~P1=\TEMP\ %~N1=Техт %~X1=.doc %~DP1=C:\TEMP\
Операторы OFF COPY %1 %2 GOTO Label1 ECHO Эта строка никогда не выполнится :Label1 REM Продолжение выполнения DIR %2
Операторы условия IF [NOT] строка 1==строка 2 команда 1 [ELSE команда 2] IF [/I] [NOT] строка 1 оператор_сравнения строка 2 команда IF %1==%2 ECHO Параметры совпадают! IF %1==Петя ECHO Привет, Петя!
Операторы сравнения в IF Оператор Значение EQLРавно NEQНе равно LSSМеньше LEQМеньше или равно GTRБольше GEQБольше или равно
Проверка существования заданного файла IF [NOT] EXIST файл команда 1 [ELSE команда OFF IF -%1==- GOTO NoFileSpecified IF NOT EXIST %1 GOTO FileNotExist REM Вывод сообщения о найденном файле ECHO Файл '%1' успешно найден. GOTO :EOF :NoFileSpecified REM Файл запущен без параметров ECHO В командной строке не указано имя файла. GOTO :EOF :FileNotExist REM Параметр командной строки задан, но файл не найден ECHO Файл '%1' не найден.
Проверка наличия переменной среды IF DEFINED переменная команда 1 [ELSE команда OFF CLS IF DEFINED MyVar GOTO :VarExists ECHO Переменная MyVar не определена GOTO :EOF :VarExists ECHO Переменная MyVar определена, ECHO ее значение равно %MyVar%
Проверка кода завершения предыдущей команды IF [NOT] ERRORLEVEL число команда 1 [ELSE команда OFF XCOPY my.txt C:\ > NUL REM Проверка кода завершения копирования IF ERRORLEVEL 1 GOTO ErrOccurred ECHO Копирование выполнено без ошибок. GOTO :EOF :ErrOccurred ECHO При выполнении команды XCOPY возникла ошибка!
Организация циклов выполнение заданной команды для всех элементов указанного множества; выполнение заданной команды для всех подходящих имен файлов; выполнение заданной команды для всех подходящих имен каталогов; выполнение заданной команды для определенного каталога, а также всех его подкаталогов; получение последовательности чисел с заданными началом, концом и шагом приращения; чтение и обработка строк из текстового файла; обработка строк вывода определенной команды.
Цикл FOR … IN … DO … FOR %переменная IN (множество) DO команда OFF FOR %i IN (Раз,Два,Три) DO ECHO %i в результате Раз Два Три
Цикл FOR … IN … DO … Чтобы избежать путаницы с параметрами командного файла %0 %9, для переменных следует использовать любые символы кроме 0 – OFF FOR %f IN (C:\TEMP\*.txt C:\ TEMP \*.prn) DO ECHO %f >> list.txt
Цикл FOR /D … IN … DO … FOR /D %переменная IN (набор) DO OFF CLS FOR /D %f IN (C:\*.*) DO ECHO %f
Цикл FOR /R … IN … DO … FOR /R [[диск:]путь] %переменная IN (набор) DO OFF CLS FOR /R %f IN (*.txt) DO PRINT %f Результат - распечатка всех файлов с расширением txt в текущем каталоге и всех его подкаталогах
Цикл FOR /L … IN … DO … FOR /L %переменная IN (начало,шаг,конец) DO OFF CLS FOR /L %f IN (1,1,5) DO ECHO %f %f пробежит значения от 1 до 5, и на экране напечатаются пять чисел:
Цикл FOR /L … IN … DO OFF CLS FOR /L %f IN (1,1,5) DO CALL :2 %f GOTO :EOF :2 SET /A M=10*%1 ECHO 10*%1=%M% 10*1=10 10*2=20 10*3=30 10*4=40 10*5=50
Цикл FOR /F … IN … DO … FOR /F ["ключи"] %переменная IN (набор) DO команда Ключ Описание EOL=CОпределение символа комментариев в начале строки (допускается задание только одного символа) SKIP=NЧисло пропускаемых при обработке строк в начале файла DELIMS=XXXОпределение набора разделителей для замены заданных по умолчанию пробела и знака табуляции TOKENS=X,Y,M-NОпределение номеров подстрок, выделяемых из каждой строки файла и передаваемых для выполнения в тело
Цикл FOR /L … IN … DO OFF IF NOT EXIST file.txt GOTO :NoFile FOR /F "EOL=; TOKENS=2,3* DELIMS=, " %i IN (file.txt) %i %j %k GOTO :EOF :NoFile ECHO Не найден файл file.txt!
Цикл FOR /L … IN … DO … ААА ББББ ВВВВ,ГГГГГ ДДДД ЕЕЕЕЕ,ЖЖЖЖ ЗЗЗЗ ;КККК ЛЛЛЛЛ МММММ ББББ ВВВВ ГГГГГ ДДДД ЖЖЖЖ ЗЗЗЗ
Цикл FOR /L … IN … DO OFF CLS ECHO Имена переменных среды: ECHO. FOR /F "DELIMS==" %i IN ('SET') DO ECHO %i