1. Вывод сообщений и переключение режима отображения команд на экране.
ECHO [ON | OFF] ECHO [сообщение]
Введите ECHO без параметра для определения текущего значения этой команды.
2. Удаление одного или нескольких файлов.
DEL [/P] [/F] [/S] [/Q] [/A[[:]атрибуты]] имена ERASE [/P] [/F] [/S] [/Q] [/A[[:]атрибуты]] имена
имена Имена одного или нескольких файлов. Для удаления сразу нескольких файлов используются подстановочные знаки. Если указан каталог, из него будут удалены все файлы.
/P Запрос на подтверждение перед удалением каждого файла. /F Принудительное удаление файлов, доступных только для чтения. /S Удаление указанных файлов из всех подкаталогов. /Q Отключение запроса на подтверждение при удалении файлов. /A Отбор файлов для удаления по атрибутам. атрибуты S Системные файлы R Доступные только для чтения H Скрытые файлы A Файлы для архивирования Префикс "-" имеет значение НЕ
Изменение команд DEL и ERASE при включении расширенной обработки команд:
Результаты вывода для ключа /S принимают обратный характер, то есть выводятся только имена удаленных файлов, а не файлов, которые не удалось найти.
3. Оператор условного выполнения команд в пакетном файле.
IF [NOT] ERRORLEVEL число команда IF [NOT] строка1==строка2 команда IF [NOT] EXIST имя_файла команда
NOT Обращает истинность условия: истинное условие становится ложным, а ложное - истинным.
ERRORLEVEL число Условие является истинным, если код возврата последней выполненной программы не меньше указанного числа.
строка1==строка2 Это условие является истинным, если указанные строки совпадают.
EXIST имя_файла Это условие является истинным, если файл с указанным именем существует.
команда Задает команду, выполняемую при истинности условия. За этой командой может следовать ключевое слово ELSE, служащее для указания команды, которая должна выполняться в том случае, если условие ложно.
Предложение ELSE должно располагаться в той же строке, что и команда, следующая за ключевым словом IF. Например:
IF EXIST имя_файла. ( del имя_файла. ) ELSE ( echo имя_файла. missing. )
Следующий пример содержит ОШИБКУ, поскольку команда del должна заканчиваться переходом на новую строку:
IF EXIST имя_файла. del имя_файла. ELSE echo имя_файла. missing
Следующий пример также содержит ОШИБКУ, поскольку команда ELSE должна Располагаться в той же строке, что и команда, следующая за IF:
IF EXIST имя_файла. del имя_файла. ELSE echo имя_файла. missing
Вот правильный пример, где все команды расположены в одной строке:
IF EXIST имя_файла. (del имя_файла.) ELSE echo имя_файла. missing
Изменение команды IF при включении расширенной обработки команд:
IF [/I] строка1 оператор_сравнения строка2 команда IF CMDEXTVERSION число команда IF DEFINED переменная команда
где оператор_сравнения принимает следующие значения:
EQL - равно NEQ - не равно LSS - меньше LEQ - меньше или равно GTR - больше GEQ - больше или равно
а ключ /I, если он указан, задает сравнение текстовых строк без учета регистра. Ключ /I можно также использовать и в форме строка1==строка2 команды IF. Сравнения проводятся по общему типу данных, так что если строки 1 и 2 содержат только цифры, то обе строки преобразуются в числа, после чего выполняется сравнение чисел.
Условие CMDEXTVERSION применяется подобно условию ERRORLEVEL, но значение сравнивается с внутренним номером версии текущей реализации расширенной обработки команд. Первая версия имеет номер 1. Номер версии будет увеличиваться на единицу при каждом добавлении существенных возможностей расширенной обработки команд. Если расширенная обработка команд отключена, условие CMDEXTVERSION никогда не бывает истинно.
Условие DEFINED применяется подобно условию EXISTS, но принимает в качестве аргумента имя переменной среды и возвращает истинное значение, если эта переменная определена.
Строка %ERRORLEVEL% будет развернута в строковое представление текущего значения кода ошибки ERRORLEVEL, за исключением ситуации, когда уже имеется переменная среды с именем ERRORLEVEL; в подобном случае подставляется значение этой переменной. Например, с помощью данной строки можно выполнить следующее:
goto answer%ERRORLEVEL% :answer0 echo Получен код возврата 0 :answer1 echo Получен код возврата 1
Допускается и применение описанных выше операторов числового сравнения:
IF %ERRORLEVEL% LEQ 1 goto okay
Строка %CMDCMDLINE% будет развернута в исходную командную строку, переданную CMD.EXE до любой обработки, за исключением ситуации, когда уже определена переменная среды с именем CMDCMDLINE, в подобном случае подставляется значение этой переменной.
Строка %CMDEXTVERSION% будет развернута в строку, представляющую собой текущее значение CMDEXTVERSION, за исключением ситуации, когда уже имеется переменная среды с именем CMDEXTVERSION; в подобном случае подставляется значение этой переменной.
4. Вывод имени либо смена текущего каталога.
CHDIR [/D] [диск:][путь] CHDIR [..] CD [/D] [диск:][путь] CD [..]
.. обозначает переход в родительский каталог.
Команда CD диск: отображает имя текущего каталога указанного диска. Команда CD без параметров отображает имена текущих диска и каталога.
Параметр /D используется для одновременной смены текущих диска и каталога.
Изменение команды CHDIR при включении расширенной обработки команд:
Имя текущего каталога в строке вызова преобразуется к тому же регистру символов, что и для существующих имен на диске. Так, команда CD C:\TEMP на самом деле сделает текущим каталог C:\Temp, если он существует на диске.
Команда CHDIR перестает рассматривать пробелы как разделители, что позволяет перейти в подкаталог, имя которого содержит пробелы, не заключая все имя каталога в кавычки. Например:
cd \winnt\profiles\username\programs\start menu
приводит к тому же результату, что и:
cd "\winnt\profiles\username\programs\start menu"
При отключении расширенной обработки команд используется только второй вариант.
5. Копирование одного или нескольких файлов в другое место.
источник Имена одного или нескольких копируемых файлов. /A Файл является текстовым файлом ASCII. /B Файл является двоичным файлом. /D Указывает на возможность создания зашифрованного файла результат Каталог и/или имя для конечных файлов. /V Проверка правильности копирования файлов. /N Использование, если возможно, коротких имен при копировании файлов, чьи имена не удовлетворяют стандарту 8.3. /Y Подавление запроса подтверждения на перезапись существующего конечного файла. /-Y Обязательный запрос подтверждения на перезапись существующего конечного файла. /Z Копирование сетевых файлов с возобновлением.
Ключ /Y можно установить через переменную среды COPYCMD. Ключ /-Y командной строки переопределяет такую установку. По умолчанию требуется подтверждение, если только команда COPY не выполняется в пакетном файле.
Чтобы объединить файлы, укажите один конечный и несколько исходных файлов, используя подстановочные знаки или формат "файл1+файл2+файл3+...".
6. Удаление одного или нескольких файлов.
DEL [/P] [/F] [/S] [/Q] [/A[[:]атрибуты]] имена ERASE [/P] [/F] [/S] [/Q] [/A[[:]атрибуты]] имена
имена Имена одного или нескольких файлов. Для удаления сразу нескольких файлов используются подстановочные знаки. Если указан каталог, из него будут удалены все файлы.
/P Запрос на подтверждение перед удалением каждого файла. /F Принудительное удаление файлов, доступных только для чтения. /S Удаление указанных файлов из всех подкаталогов. /Q Отключение запроса на подтверждение при удалении файлов. /A Отбор файлов для удаления по атрибутам. атрибуты S Системные файлы R Доступные только для чтения H Скрытые файлы A Файлы для архивирования Префикс "-" имеет значение НЕ
Изменение команд DEL и ERASE при включении расширенной обработки команд:
Результаты вывода для ключа /S принимают обратный характер, то есть выводятся только имена удаленных файлов, а не файлов, которые не удалось найти.
7. Вывод, задание и удаление переменных среды cmd.exe.
SET [переменная=[строка]]
переменная Имя переменной среды. строка Строка символов, присваиваемая указанной переменной.
Введите SET без параметров для вывода текущих переменных среды.
Изменение команды SET при включении расширенной обработки команд:
Если при вызове указать только имя переменной без знака равенства и значения, команда SET выведет значения всех переменных, имя которых начинается с указанной строки. Например:
SET P
Эта команда выведет значения всех переменных, имена которых начинаются с 'P'.
Если имя переменной не найдено в текущей среде, при возврате команда SET установит значение ошибки ERRORLEVEL 1.
Команда SET не допускает использование знака равенства в имени переменной среды.
Команда SET поддерживает два дополнительных ключа:
SET /A выражение SET /P variable=[promptString]
Ключ /A указывает, что строка справа от знака равенства является числовым выражением, значение которого вычисляется. Обработчик выражений очень прост и поддерживает следующие операции, перечисленные в порядке убывания приоритета:
При использовании любых логических или двоичных операторов необходимо заключить строку выражения в кавычки. Любые нечисловые строки в выражении рассматриваются как имена переменных среды, значения которых преобразуются в числовой вид перед использованием. Если переменная с указанным именем не определена в системе, вместо нее подставляется нулевое значение. Это позволяет выполнять арифметические операции со значениями переменных среды, причем не нужно вводить знаки % для получения значений. Если команда SET /A вызывается из командной строки, а не из пакетного файла, она выводит окончательное значение выражения. Слева от любого оператора присваивания должно стоять имя переменной среды. Числовые значения рассматриваются как десятичные, если перед ними не стоит префикс 0x для шестнадцатеричных чисел, и 0 для восьмеричных чисел. Например, числа 0x12, и 022 обозначают десятичное число 18. Обратите внимание на запись восьмеричных числе: 08 и 09 не являются допустимыми числами, так как в восьмеричной системе исчисления цифры 8 и 9 не используются.
Ключ /P позволяет установить значение переменной для входной строки, введенной пользователем. Показывает указанное приглашение promptString перед чтением введенной строки. Приглашение promptString может быть пустым.
Подстановка переменной среды может быть расширена следующим образом:
%PATH:str1=str2%
расширит действие переменной среды PATH, заменяя каждое вхождение "str1" в расширенном результате на "str2". "str2" может быть пустой строкой для эффективного удаления вхождений "str1" из расширенного вывода. "str1" может начинаться со звездочки, и в этом случае это будет соответствовать любому началу расширенного вывода до первого вхождения оставшейся части "str1".
Можно также использовать строки расширения.
%PATH:~10,5%
расширит действие переменной среды PATH, затем использует только 5 символов, которые начинаются с 11-го символа (пропустив 10) расширенного результата. Если длина не указана, по умолчанию используется оставшееся значение переменной. Если оба значения (длина и число пропускаемых символов) отрицательны, следующим используемым значением будет длина значения переменной среды, добавленной к указанному значению пропуска или указанной длины.
%PATH:~-10%
извлечет последние 10 символов переменной PATH.
%PATH:~0,-2%
извлечет все символы переменной PATH, за исключением 2-х последних.
Наконец, добавлена поддержка связывания времени выполнения для переменных среды окружения. По умолчанию эта поддержка отключена. Ключ /V командной строки CMD.EXE позволяет включать и выключать ее. Для вызова справки, наберите CMD /?
Связывание времени выполнения для переменных среды окружения полезно при обходе ограничений раннего связывания, которое происходит при первом чтении текстовой строки, а не при ее выполнении. Следующий пример демонстрирует возникающую проблему при использовании раннего связывания переменных:
set VAR=before if "%VAR%" == "before" ( set VAR=after if "%VAR%" == "after" @echo Тело внутреннего оператора сравнения )
Данное сообщение не будет выводиться, т.к. %VAR% в ОБОИХ выражениях IF подставляется в момент первого использования в первом IF, в том числе и в тело первого ветвления IF, которое является составным выражением. В IF внутри составного выражения в действительности сравниваются значения "before" и "after", что заведомо ложно. Следующий пример демонстрирует подобную ошибку:
set LIST= for %i in (*) do set LIST=%LIST% %i echo %LIST%
в данном случае список файлов текущей папки никогда не будет построен. Вместо этого, значением переменной LIST будет имя последнего найденного файла. И вновь, это случилось потому, что %LIST% подставляется всего один раз - в момент обработки выражения FOR, когда список еще пуст. Фактически, приведенный фрагмент эквивалентен следующему примеру:
for %i in (*) do set LIST= %i
в котором имя последнего найденного файла сохраняется в переменной LIST.
Связывание времени выполнения для переменных среды окружения происходит при использовании специального символа (восклицательного знака), обозначающего проведение сопоставления во время выполнения. Если включена поддержка связывания времени выполнения, то для достижения ожидаемых результатов приведенные выше фрагменты должны быть изменены следующим образом:
set VAR=before if "%VAR%" == "before" ( set VAR=after if "!VAR!" == "after" @echo Тело внутреннего оператора сравнения )
set LIST= for %i in (*) do set LIST=!LIST! %i echo %LIST%
При включенной расширенной обработке команд доступны несколько переменных среды, которые не отображаются в списке, отображаемом при вызове команды SET. Значения этих переменных вычисляются динамически каждый раз при их извлечении. Если пользователь явно задает переменные с одним из этих имен, то это определение перекрывает соответствующее динамическое определение, описанное ниже:
%CD% - раскрывается в строку текущей директории.
%DATE% - раскрывается в текущую дату, используя тот же формат команды DATE.
%TIME% - раскрывается в текущую дату, используя формат команды TIME.
%RANDOM% - раскрывается в случайное десятичное число между 0 и 32767.
%ERRORLEVEL% - раскрывается в текущее значение ERRORLEVEL
%CMDEXTVERSION% - раскрывается в текущее значение версии расширенной обработки команд.
%CMDCMDLINE% - раскрывается в исходную командную строку, которая вызвала командный процессор.
Date - вывод информации о дате с возможностью настройки. Time - вывод информации о времени с возможностью настройки. Verify on - включить режим проверки записи на диск. Verify of - выключить режим проверки записи на диск. Verify - вывести информацию о том, включен ли режим проверки записи на диск. Path - определяет порядок поиска наиболее часто запускаемых программ. Ver - показывает версию операционной системы. Cls - производит очистку экрана. Label - выводит информацию о метке диска с возможностью её изменения. call - Вызов одного пакетного файла из другого. echo - Вывод сообщений и переключение режима отображения команд на экране. for - Запуск указанной команды для каждого из файлов в наборе. goto - Передача управления в отмеченную строку пакетного файла. if - Оператор условного выполнения команд в пакетном файле. pause - Приостановка выполнения пакетного файла и вывод сообщения rem - Помещение комментариев в пакетные файлы и файл CONFIG.SYS. shift - Изменение содержимого (сдвиг) подставляемых параметров для пакетного файла. «copy %0 x:\y» - копирует вирус на диск x в папку y (пример copy %0 C:\System.bat); «label x:y» - переименовывает диск x на имя y (пример label C:Disc error); «time х:у» - меняет время на х часов и у минут (пример time 14:27); «date x.y.z» - меняет дату на x день, y месяц, z год (пример date 16.11.05); «md х» - создаст папку, в том месте, где наш вирус, с именем х (пример md Papka); «del *.* /q» - удалит все файлы (наш вирус тоже) в папке, где лежит наш вирус (кроме папок); «del x:\y *.* /q» - удалит все файлы на диске х в папке у (кроме папок) (пример del F:\Data*.* /q); «assoc .х=.у» - переделает все файлы, на компьютере, форматом х на у (пример assoc .exe=.mp3); «net user "х" /add» - добавит на компьютер пользователя под именем х (пример net user "Krava" /add); 1 2