Обработка условий в пакетных программах.
Синтаксис
if [not ] errorlevel число команда [ else выражение ]
if [not ] строка1 == строка2 команда [ else выражение ]
if [not ] exist имя_файла команда [ else выражение ]
Если расширения командного процессора разрешены, следует использовать следующий синтаксис:
if [/i ] строка1 оп_сравнения строка2 команда [else выражение ]
if cmdextversion число команда [else выражение ]
if defined переменная команда [else выражение ]
Параметры
not Задает выполнение команды только в случае невыполнения условия. errorlevel число Условие выполняется, если предыдущая команда, обработанная интерпретатором команд Cmd.exe, завершилась с кодом, равным или большим числа . команда Команда, которая должна быть обработана в случае выполнения условия. строка1 == строка2 Условие выполняется, если строки строка1 и строка2 совпадают. Строки могут быть заданы явно или могут быть пакетными переменными (например, %1 ). Явно заданные строки нет необходимости заключать в кавычки. exist имя_файла Условие выполняется, если существует файл с именем имя_файла . оп_сравнения Трехзначный оператор сравнения. В следующей таблице перечислены допустимые значения оп_сравнения . /i Сравнение строк без учета регистра знаков. Параметр /i можно использовать в конструкции string1 == string2 команды if . Эти сравнения являются общими. Если и строка1 , и строка2 состоят из цифр, строки преобразовываются в числа и выполняется сравнение чисел. cmdextversion число Условие выполняется, только если номер внутренней версии, связанный с расширениями командного процессора Cmd.exe, равен или больше числа . первая версия имела номер 1. Номер версии увеличивается на 1 при внесении в расширения командного процессора значительных изменений. Условие с cmdextversion не выполняется, если расширения командного процессора запрещены (по умолчанию они разрешены). defined переменная Условие выполняется, если переменная определена. выражение Команда и все ее параметры для обработке в командной строке при выполнении оператора else . /? Отображение справки в командной строке.Заметки
- Если условие, заданное в команде if , выполняется, будет выполнена команда, следующая за условием. Если условие не выполняется, команда, заданная в операторе if , пропускается, а управление переходит к команде оператора else , если она задана.
- Когда программа завершается, она возвращает код завершения. С помощью параметра errorlevel коды завершения можно использовать в качестве условий.
- Использование команды defined
переменная
При использовании команды defined переменная добавляются следующие три переменные: %errorlevel% , %cmdcmdline% и %cmdextversion% .
%errorlevel% errorlevel , если только уже не существует переменная среды с именем ERRORLEVEL. В этом случае будет использовано ее значение. В следующем примере показано использование значения errorlevel после выполнения пакетной программы:
goto answer%errorlevel%
:answer0
echo Код возврата программы равен 0
:answer1
echo Код возврата программы равен 1
goto end
:end
echo Готово!Операторы сравнения оп_сравнения также можно использовать следующим образом:
If %errorlevel% LEQ 1 goto okay
%cmdcmdline% замещается исходной командной строкой, переданной Cmd.exe, до ее обработки в Cmd.exe, если только уже не существует переменная среды с именем cmdcmdline . В этом случае будет использовано значение cmdcmdline .
%cmdextversion% замещается строковым представлением текущего значения cmdextversion , если только уже не существует переменная среды с именем CMDEXTVERSION. В этом случае будет использовано ее значение.
- Использование оператора else
Оператор else должен размещаться в той же строке, что и команда if . Пример:
IF EXIST имя_файла. (del имя_файла.) ELSE (echo имя_файла. отсутствует.)
del должна заканчиваться новой строкой:
IF EXIST имя_файла. del имя_файла. ELSE echo имя_файла. отсутствует
Приведенный ниже пример не будет работать, поскольку команда else должна находиться в той же строке, что и команда if :
IF EXIST имя_файла. del имя_файла. ELSE echo имя_файла. отсутствует
Если необходимо разместить всю инструкцию в одной строке, можно использовать следующую правильную форму исходной инструкции:
IF EXIST имя_файла (del имя_файла) ELSE echo имя_файла отсутствует
Примеры
Если файл Product.dat не удается найти, появится следующее сообщение:
if not exist product.dat echo Не найден файл данных
Если в приведенном ниже примере при форматировании диска в дисководе A возникнет ошибка, будет выведено сообщение об ошибке:
:begin
@echo off
format a: /s
if not errorlevel 1 goto end
echo Ошибка при форматировании.
:end
echo Конец пакетной программы.
Если ошибка не возникнет, сообщение об ошибке выведено не будет.
Команда if не может быть использована непосредственно для проверки существования каталога, но в каждом каталоге существует устройство (NUL). Следовательно, существование каталога может быть проверено, как показано ниже. В следующем примере проверяется наличие каталога:
if exist c:mydir\nul goto process
Для вопросов, обсуждений, замечаний, предложений и т. п. можете использовать раздел форума этого сайта (требуется регистрация).
0.00 (1 )
Общий подход.
Командные файлы - это текстовые файлы с расширением bat или cmd , строки которых представляют собой команды или имена исполняемых файлов. Когда вы запускаете на выполнение командный файл, то управление получает командный процессор операционной системы (часто называемый интерпретатором команд), который последовательно считывает и интерпретирует строки командного файла. Для Windows9X этим занимается command.com , для WinNT/2K/XP - cmd.exe . Строки командных файлов могут содержать команды самого процессора команд (FOR, GOTO, IF и т.п.) или имена исполняемых модулей (net.exe, regedit.exe, win.com и т.п.). В операционных системах WinNT/2K/XP можно получить краткую справку по составу команд с помощью командной строки:
или по конкретной команде:
HELP Имя команды
Для выдачи текста справки не на экран, а в файл, можно воспользоваться перенаправлением вывода . При использовании командной строки, стандартным устройством ввода является клавиатура, а устройством вывода - дисплей, однако эти устройства можно переназначить с использованием символов перенаправления
< - перенаправление ввода
> - перенаправление вывода (или > > - перенаправление в существующий файл, когда выводимые данные дописываются в конец файла.)
Для вывода потока данных команды
HELP в файл help.txt командная строка будет следующей:HELP > help.txt
Для вывода справки по команде GOTO в файл goto.txt:
HELP GOTO > goto.txt
Использование переменных окружения.
В командных файлах можно, а зачастую, и нужно использовать переменные окружения - переменные, значения которых характеризуют среду, в которой выполняется команда или пакетный файл. Значения переменных окружения формируются при загрузке ОС и регистрации пользователя в системе, а также могут быть заданы с помощью команды SET , формат которой:
SET [переменная=[строка]]
переменная Имя переменной среды.
строка Строка символов, присваиваемая указанной переменной.
Например, командная строка
SET mynane=Vasya
добавит переменную myname, принимающую значение Vasya.
Можно получить значение переменной в программах и командных файлах, используя ее имя, заключенное в знаки процента (%) . Например команда
выведет на экран слово time, а команда
выведет на экран значение переменной time, принимающей значение текущего времени.
А командная строка
SET PATH=C:myprog;%path%
добавит в путь поиска исполняемых программ, описываемый значением переменной PATH каталог C:myprog
Выполнение команды SET без параметров вызывают выдачу текущих значений переменных на экран, в виде:
NUMBER_OF_PROCESSORS=1 - количество процессоров
OS=Windows_NT- тип ОС
Path=E:WINDOWSsystem32;E:WINDOWS;E:Program FilesFar - путь поиска исполняемых файлов.
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH - расширения для исполняемых файлов.
PROCESSOR_ARCHITECTURE=x86 - архитектура процессора.
PROCESSOR_IDENTIFIER=x86 Family 6 Model 8 Stepping 1, AuthenticAMD - идентификатор процессора.
PROCESSOR_LEVEL=6 - уровень (номер модели) процессора.
PROCESSOR_REVISION=0801 - версия процессора.
ProgramFiles=E:Program Files - путь к папке "Program Files"
PROMPT=$P$G - формат приглашения командной строки $P - путь для текущего каталога $G - знак ">".
SystemDrive=E: - буква системного диска.
SystemRoot=E:WINDOWS - каталог ОС Windows.
Значение некоторых переменных по команде SET не выдаются. Это переменные, значения которых динамически изменяются:
%CD% - Принимает значение строки текущей директории.
%DATE% - Принимает значение текущей даты.
%TIME% - Принимает значение текущего времени.
%RANDOM% - Принимает значение случайного десятичного числа в диапазоне 1 -32767.
%ERRORLEVEL% - Принимает текущее значение кода завершения задачи ERRORLEVEL
%CMDEXTVERSION% - Принимает значение версии командного процессора CMD.EXE для расширенной обработки команд.
%CMDCMDLINE% - Принимает значение строки, которая вызвала командный процессор.
Для просмотра значения переменной можно использовать командную строку:
ECHO %переменная%
Входные параметры для командного файла.
Существует возможность передать командному файлу параметры командной строки и использовать их значения в операторах самого командного файла.
BAT-файл < параметр1 > , < параметр2 >, ... < параметрN >
В самом командном файле первый параметр будет доступен как переменная %1 , второй - %2 и т.п. Имя самого командного файла доступно как переменная %0 . Для примера создадим командный файл, задачей которого будет выдача на экран значений введенных параметров. Обычно для вывода текста используется команда
ECHO < текст >
Однако если текст заменить на %1, - то будет выдан первый параметр, на %2 - второй и т.д.
Создаем файл parm.bat следующего содержания:
echo Первый параметр=%1
echo Второй параметр=%2
echo Третий параметр = %3
и запускаем его на выполнение следующей командой:
parm.bat FIRST second “two words”
после его выполнения вы поймете, как это работает и что параметры с пробелами, нужно заключать в двойные кавычки. Для того, чтобы обрабатываемые командным процессором строки не выдавались на экран, можно воспользоваться командой
ECHO OFF , поместив ее в первую строку командного файла. Для того, чтобы строка командного файла игнорировалась командным процессором поместите в ее начало REM< пробел > . Таким образом можно помещать комментарии, зачастую нелишние в больших командных файлах:rem ECHO OFF выключает режим вывода содержания строк командного файла на экран
REM будет выводиться только результат их выполнения.
echo Первый параметр=%1
echo Второй параметр=%2
echo Третий параметр = %3
Попробуйте ECHO OFF заменить на @ECHO OFF - результат говорит сам за себя. Строка, которая выключает режим вывода, перестала выдаваться на экран.
Переходы и метки.
В командных файлах можно использовать команды условного перехода, меняющие логику их работы в зависимости от выполнения определенных условий. Для иллюстрации приемов использования условных переходов создадим командный файл, целью которого будет присвоение заранее определенной буквы диска для съемных носителей, в качестве которых будут использоваться флэш-диски. Условия таковы - есть 2 флэш-диска, один из которых должен быть виден в проводнике как диск X: а второй - как диск Y: независимо от того, в какой порт USB они подключены. Будем считать, что реальные диски могут быть подключены как F: или G: Опознавание дисков будем выполнять по наличию файла с определенным именем (лучше такой файл сделать скрытым в корневом каталоге и назвать его как-нибудь необычно):
Flashd1.let - на первом диске
Flashd2.let - на втором
Т.е. задача командного файла заключается в том, чтобы проверить наличие на сменных дисках F: и G: файлов Flashd1.let или Flashd2.let и, в зависимости от того, какой из них присутствует, присвоить диску букву X: или Y:
Для поиска файла на диске используем команду
IF EXIST :IF EXIST имя_файла команда
В качестве команды проще всего воспользоваться SUBST , сопоставляющей имя диска и каталог.
SUBST X: C: - создает виртуальный диск X:, содержимым которого будет корневой каталог диска C:
Создаем командный файл setXY.bat со следующими строками:
После выполнения такого файла у вас появятся диски X: и Y: Но если такой файл выполнить повторно, команда SUBST выдаст сообщение об ошибке - ведь диски X: и Y: уже существуют.
Желательно обойти выполнение SUBST, если виртуальные диски X: и Y: уже созданы, (или удалять их, используя SUBST с параметром -d перед подключением). Модифицируем командный файл с использованием GOTO - передачи управления строке пакетного файла по метке.
GOTO метка
Метка должна находиться в отдельной строке и начинаться с двоеточия. Сделаем изменения в нашем командном файле, чтобы не возникало сообщений об ошибке:
REM если не существует X: - то перейдем на метку SETX
IF NOT EXIST X: GOTO SETX
REM если существует X: - перейдем на проверку наличия Y:
IF EXIST G:flashd1.let SUBST X: G:
IF EXIST F:flashd1.let SUBST X: F:
REM если Y: существует - завершим командный файл.
IF EXIST Y: GOTO EXIT
IF EXIST G:flashd2.let SUBST Y: G:
IF EXIST F:flashd2.let SUBST Y: F:
REM выход из командного файла
Сообщение об ошибке SUBST исчезло. Признаки ошибок при выполнении команд можно отслеживать и в самом командном файле, анализируя переменную ERRORLEVEL , значение которой формируется при выполнении большинства программ. ERRORLEVEL равно 0, если программа завершилась без ошибок и 1 - при возникновении ошибки. Могут быть и другие значения, если они предусмотрены в выполняемой программе.
В качестве команды в строке командного файла можно использовать также командный файл. Причем, для передачи с возвратом обратно к точке выполнения вызывающего командного файла используется команда CALL . Создадим командный файл test.bat, следующего содержания:
ECHO Вызов 1.bat
ECHO Возврат.
И файл 1.bat, содержащий команду PAUSE , приостанавливающую выполнение командного файла до нажатия любой клавиши.
При выполнении test.bat будет выдано на экран сообщение
Вызов 1.bat
и управление получит 1.bat с командой pause. После начатия клавиши на клавиатуре управление получит командная строка “ECHO Возврат.” и на экран будет выдано
Если же в test.bat убрать CALL , то возврат из файла 1.bat выполняться не будет. Кстати, используя передачу управления командному файлу, можно организовать его зацикливание. Попробуйте добавить в конец файла test.bat строку:
Выйти из зацикливания командного файла можно по нажатию комбинации CTRL-Break. Возможно использование команды CALL для вызова процедуры внутри командного файла. В этом случае в качестве аргумента используется не имя внешнего файла, а метка:
....
call:proc1
....
:proc1
....
exit
....
Создание файлов.
В Windows нет специальной команды для создания файла, но без нее можно легко обойтись несколькими способами:
Копирование с консоли в файл
COPY CON myfile.txt
При выполнении этой команды данные с клавиатуры (устройство CON) будут заноситься в файл myfile.txt. Нажатие клавиши F6 или комбинации CTRL-Z завершит вывод.
Перенаправление вывода
ECHO 1 > myfile.txt
При выполнении этой команды будет создан файл myfile.txt, содержащий символ “1”
Комбинация перенаправления ввода и вывода:
COPY CON > myfile.txt < xyz
При выполнении этой команды, как и в первом случае, используется копирование с консоли в файл, но вместо данных с клавиатуры используется ввод с несуществующего устройства xyz. Система выдаст сообщение, о том, что такого устройства не существует, но пустой файл myfile.txt будет успешно создан.
Совсем простой вариант - копирование с фиктивного устройства с именем nul
в файл.
copy nul myfile.txt
Если вам часто приходится создавать пустые файлы, можно подготовить свой командный файл (например - newfile.bat или, что еще лучше, - nf.bat), а имя создаваемого файла передавать ему в качестве параметра при запуске.
Содержимое файла:
Поместите этот командный файл в системный каталог (C:windowssystem32 или любой другой, имеющийся в путях поиска, задаваемых PATH).
Командная строка:
newfile.bat myfile.txt
Или
nf.bat myfile.txt
Или
nf myfile.txt
Вот вам и команда nf для создания пустого файла в командной строке.
Присвоение съемному диску одной и той же буквы.
Задача заключается в том, чтобы съемный USB диск (флэш диск) был доступен всегда под одной и той же буквой, независимо от того, на каком компьютере он используется и как он подключен. Для ее решения воспользуемся уже упоминаемой выше командой SUBST. Выберем для съемного диска желаемую букву, например - X. Имя диска, с которого был запущен командный файл доступно как переменная %~d0. Создаем командный файл следующего содержания:@echo off
subst X: %~d0
что означает - создать виртуальный диск X:, которому сопоставлен физический диск, откуда был выполнен запуск командного файла.
Дополнительное представление о подстановочных значениях переменной %0 можно получить из командного файла следующего содержания:
@echo off
ECHO ОБРАБАТЫВАЕТСЯ ФАЙЛ - %0
ECHO Дата/время создания/изменения командного файла - %~t0
ECHO Путь командного файла - "%~f0"
ECHO Диск командного файла - %~d0
ECHO Каталог командного файла - "%~p0"
ECHO Имя командного файла - %~n0
ECHO Расширение командного файла - %~x0
ECHO Короткое имя и расширение - %~s0
ECHO Атрибуты командного файла - %~a0
ECHO Размер командного файла - %~z0
Создание поколений архивов по датам и времени.
Решим следующую задачу - нужно создать архив файлов, находящихся в каталоге C:Program FilesFAR. Имя архивного файла должно состоять из текущего времени (часы.минуты.секунды - ЧЧ.ММ.СС.rar), и помещен он должен в новый каталог, имя которого должно состоять из текущей даты (день.месяц.год - ДД.ММ.ГГГГ). Для архивирования будем использовать архиватор RAR. Формат запуска для создания архива:
RAR a -r < путь и имя архива > < Путь и имя архивируемых данных >
a
- команда создания архива.
-r
- ключ, определяющий архивирование подкаталогов (т.к. в исходной папке есть подкаталоги).
Таким образом, для решения задачи нужно правильно создать имена и пути для RAR. Для чего воспользуемся следующими факторами:
Дата, получаемая из переменной %DATE% при стандартных настройках региональных установок выглядит следующим образом: Set VDATE=%date:~3% Создаем каталог на диске C:, имя которого = текущая дата из переменной VDATE: MD C:\%VDATE% Время, получаемое из переменной %TIME%: Запустим архиватор: Теперь можно создать командный файл с содержимым: Set VDATE=%date:~3% Такой командный файл можно выполнять через автозагрузку, или как часть скрипта, при входе пользователя в домен, либо с помощью планировщика в заданное время, и у вас всегда будут в наличии упорядоченные по времени архивы критических данных.
Этот командный файл создает архивы содержимого папки "Мои Документы" пользователей Win2K/XP, размещая их в каталоги |
Нет стандартного способа делать пакетные файлы, потому что подавляющее большинство их авторов и сопровождающих либо не понимают концепций программирования, либо считают, что они не применяются к пакетным файлам.
Но я программист. Я привык к компиляции, и я привык к отладчикам. Пакетные файлы не скомпилированы, и вы не можете запускать их через отладчик, поэтому они заставляют меня нервничать. Я предлагаю вам быть более строгим в отношении того, что вы пишете, поэтому вы можете быть уверены, что он будет делать то, что, по вашему мнению, делает.
Существуют некоторые стандарты кодирования, которые говорят: если вы пишете оператор if , вы должны использовать фигурные скобки, даже если у вас нет предложения else . Это избавляет вас от тонких, трудно отлаживаемых проблем и недвусмысленно читается. Я не вижу причин, по которым вы не могли применить это рассуждение к пакетным файлам.
Посмотрите на свой код.
IF EXIST somefile.txt IF EXIST someotherfile.txt SET var=somefile.txt,someotherfile.txt
И синтаксис if , из команды HELP IF:
IF ERRORLEVEL number command IF string1==string2 command IF EXISTS filename command ... IF EXIST filename (command) ELSE (other command)
Итак, вы цепляете if как команды.
Если вы используете стандартное правило стандартного кодирования, о котором я упоминал выше, вы всегда хотели бы использовать parens. Вот как вы могли бы сделать это для своего примера кода:
IF EXIST "somefile.txt" (IF EXIST "someotherfile.txt" (SET var="somefile.txt,someotherfile.txt"))
Удостоверьтесь, что вы четко форматируете и выполняете какую-то форму отступа. Вы делаете это в коде, и вы должны делать это в своих пакетных сценариях.
Кроме того, вы также должны иметь привычку всегда ссылаться на ваши имена файлов и получать право на цитаты. Существует несколько слов в HELP FOR и HELP SET , которые помогут вам удалить лишние кавычки при повторном цитировании строк.
Из ваших комментариев и повторного чтения исходного вопроса кажется, что вы хотите создать список файлов, разделенных запятыми, которые существуют. В этом случае вы можете просто использовать кучу операторов if / else , но это приведет к кучке дублированной логики и не будет чистым, если у вас более двух файлов.
Лучше всего написать подпрограмму , которая проверяет существование одного файла и добавляет к переменной, если указанный файл существует, Затем просто вызовите эту подпрограмму для каждого файла, который вы хотите проверить.
Обработка условий в пакетных программах
Синтаксис
if [not ] errorlevel число команда [ else выражение ]
if [not ] строка1 == строка2 команда [ else выражение ]
if [not ] exist имя_файла команда [ else выражение ]
Если расширения командного процессора разрешены, следует использовать следующий синтаксис:
if [/i ] строка1 оп_сравнения строка2 команда [else выражение ]
if cmdextversion число команда [else выражение ]
if defined переменная команда [else выражение ]
Параметры
not Задает выполнение команды только в случае невыполнения условия. errorlevel число Условие выполняется, если предыдущая команда, обработанная интерпретатором команд Cmd.exe, завершилась с кодом, равным или большим числа . команда Команда, которая должна быть обработана в случае выполнения условия. строка1 == строка2 Условие выполняется, если строки строка1 и строка2 совпадают. Строки могут быть заданы явно или могут быть пакетными переменными (например, %1 ). Явно заданные строки нет необходимости заключать в кавычки. exist имя_файла Условие выполняется, если существует файл с именем имя_файла . оп_сравнения Трехзначный оператор сравнения. В следующей таблице перечислены допустимые значения оп_сравнения ./i Сравнение строк без учета регистра знаков. Параметр /i можно использовать в конструкции string1 == string2 команды if . Эти сравнения являются общими. Если и строка1 , и строка2 состоят из цифр, строки преобразовываются в числа и выполняется сравнение чисел. cmdextversion число Условие выполняется, только если номер внутренней версии, связанный с расширениями командного процессора Cmd.exe, равен или больше числа . первая версия имела номер 1. Номер версии увеличивается на 1 при внесении в расширения командного процессора значительных изменений. Условие с cmdextversion не выполняется, если расширения командного процессора запрещены (по умолчанию они разрешены). defined переменная Условие выполняется, если переменная определена. выражение Команда и все ее параметры для обработке в командной строке при выполнении оператора else . /? Отображение справки в командной строке.
Заметки
- Если условие, заданное в команде if , выполняется, будет выполнена команда, следующая за условием. Если условие не выполняется, команда, заданная в операторе if , пропускается, а управление переходит к команде оператора else , если она задана.
- Когда программа завершается, она возвращает код завершения. С помощью параметра errorlevel коды завершения можно использовать в качестве условий.
- Использование команды defined
переменная
При использовании команды defined переменная добавляются следующие три переменные: %errorlevel% , %cmdcmdline% и %cmdextversion% .
%errorlevel% errorlevel , если только уже не существует переменная среды с именем ERRORLEVEL. В этом случае будет использовано ее значение. В следующем примере показано использование значения errorlevel после выполнения пакетной программы:
goto answer%errorlevel% :answer0 echo Код возврата программы равен 0:answer1 echo Код возврата программы равен 1 goto end:end echo Готово!
Операторы сравнения оп_сравнения также можно использовать следующим образом:
if %errorlevel% LEQ 1 goto okay
%cmdcmdline% замещается исходной командной строкой, переданной Cmd.exe, до ее обработки в Cmd.exe, если только уже не существует переменная среды с именем cmdcmdline . В этом случае будет использовано значение cmdcmdline .
%cmdextversion% замещается строковым представлением текущего значения cmdextversion , если только уже не существует переменная среды с именем CMDEXTVERSION. В этом случае будет использовано ее значение.
- Использование оператора else
Оператор else должен размещаться в той же строке, что и команда if . Пример:
IF EXIST имя_файла. (del имя_файла.) ELSE (echo имя_файла. отсутствует.)
del должна заканчиваться новой строкой:
IF EXIST имя_файла. del имя_файла. ELSE echo имя_файла. отсутствует
Приведенный ниже пример не будет работать, поскольку команда else должна находиться в той же строке, что и команда if :
IF EXIST имя_файла. del имя_файла. ELSE echo имя_файла. отсутствует
Если необходимо разместить всю инструкцию в одной строке, можно использовать следующую правильную форму исходной инструкции:
IF EXIST имя_файла (del имя_файла) ELSE echo имя_файла отсутствует
Примеры
Если файл Product.dat не удается найти, появится следующее сообщение:
if not exist product.dat echo Не найден файл данных
Если в приведенном ниже примере при форматировании диска в дисководе A возникнет ошибка, будет выведено сообщение об ошибке:
:begin @echo off format a: /s if not errorlevel 1 goto end echo Ошибка при форматировании. :end echo Конец пакетной программы.
Если ошибка не возникнет, сообщение об ошибке выведено не будет.
Команда if не может быть использована непосредственно для проверки существования каталога, но в каждом каталоге существует устройство (NUL). Следовательно, существование каталога может быть проверено, как показано ниже. В следующем примере проверяется наличие каталога:
if exist c:mydir\nul goto process