Проверка существования заданного файла
Второй способ использования команды — это проверка существования заданного файла. Синтаксис для этого случая имеет вид:
Условие считается истинным, если указанный файл существует. Кавычки для имени файла не требуются. Приведем пример командного файла, в котором с помощью такого варианта команды IF проверяется наличие файла, указанного в качестве параметра командной строки.
Проверка наличия переменной среды
Аналогично файлам команда позволяет проверить наличие в системе определенной переменной среды:
Здесь условие применяется подобно условию наличия заданного файла, но принимает в качестве аргумента имя переменной среды и возвращает истинное значение, если эта переменная определена. Например:
Проверка кода завершения предыдущей команды
Еще один способ использования команды — это проверка кода завершения (кода выхода) предыдущей команды. Синтаксис для в этом случае имеет следующий вид:
Здесь условие считается истинным, если последняя запущенная команда или программа завершилась с кодом возврата, равным либо превышающим указанное число.
Составим, например, командный файл, который бы копировал файл my.txt на диск C: без вывода на экран сообщений о копировании, а в случае возникновения какой-либо ошибки выдавал предупреждение:
IF ERRORLEVEL LEQ 1 GOTO Case1
Иногда более удобным для работы с кодами завершения программ может оказаться использование переменной . (строковое представление текущего значения кода ошибки ).
Проверка версии реализации расширенной обработки команд
Наконец, для определения внутреннего номера версии текущей реализации расширенной обработки команд применяется оператор в следующем виде:
Здесь условие применяется подобно условию , но число сравнивается с вышеупомянутым внутренним номером версии. Первая версия имеет номер 1. Номер версии будет увеличиваться на единицу при каждом добавлении существенных возможностей расширенной обработки команд. Если расширенная обработка команд отключена, условие никогда не бывает истинно.
Организация циклов
В командных файлах для организации циклов используются несколько разновидностей оператора , которые обеспечивают следующие функции:
Самый простой вариант синтаксиса команды для командных файлов имеет следующий вид:
Перед названием переменной должны стоять именно два знака процента , а не один, как это было при использовании команды непосредственно из командной строки.
Сразу приведем пример. Если в командном файле заданы строки
то в результате его выполнения на экране будет напечатано следующее:
на экран будет выведено
Параметр представляет подставляемую переменную (счетчик цикла), причем здесь могут использоваться только имена переменных, состоящие из одной буквы. При выполнении команда заменяет подставляемую переменную текстом каждой строки в заданном множестве, пока команда, стоящая после ключевого слова , не обработает все такие строки.
Чтобы избежать путаницы с параметрами командного файла %0 — %9, для переменных следует использовать любые символы кроме .
Параметр множество в команде может также представлять одну или несколько групп файлов. Например, чтобы вывести в файл список всех файлов с расширениями txt и , находящихся в каталоге C:TEXT, без использования команды , можно использовать командный файл следующего содержания:
При таком использовании команды процесс обработки продолжается, пока не обработаются все файлы (или группы файлов), указанные во множестве.
Следующий вариант команды реализуется с помощью ключа /D:
В случае, если набор содержит подстановочные знаки, то команда выполняется для всех подходящих имен каталогов, а не имен файлов. Скажем, выполнив следующий командный файл:
мы получим список всех каталогов на диске C:, например:
Эта статья рассказывает, как в bat файле проверить, существует ли определенный файл или определенная папка (директория),
Как проверить, существует ли файл – условием if exist или командой dir
Проверить наличие директории – условием if exist или командой dir
Как проверить, существует ли файл
Командный интерпретатор cmd поддерживает условную обработку в такой форме:
Например, чтобы показать сообщение об ошибке, если не найден необходимый для работы файл
Условие поддерживает маски в именах файлов, например:
if exist *.tmp goto cleanup
Проверка наличия файла командой dir
Это альтернативный способ проверки существования файла, основанный на том, что команда dir имяфайла возвращает 0, если файл существует, и 1, если файл не существует:
в зависимости от того, какую ситуацию требуется обнаружить – когда файл найден или когда не найден.
Как проверить, существует ли папка
Та же команда if exist используется и для проверки наличия папки, но с одним отличием: после имени папки следует поставить обратную наклонную черту , чтобы команда проверяла именно папку:
Если не ставить символ обратной наклонной черты, то команда будет давать положительный результат и в случае, когда существует файл с таким именем. На самом деле, это не такая большая проблема, потому что обычно файлы имеют расширения (csv, dat, pdf, xlsx и так далее), а папки используется без расширений, и поэтому совпадение имён между файлами и папками – большая редкость. Но всё равно лучше сразу прописывать правильно, тем более что разница в одном символе.
Проверка наличия папки командой dir
Вариант, основанный на команде dir, применим и для папок, также с обратной наклонной чертой :
Если имя файла содержит пробелы
Имена с пробелами необходимо указывать в кавычках:
В противном случае, интерпретатор выдаст ошибку:
“products.dat” не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
Заключение
В итоге, для проверки того, что файл или папка существует, можно использовать команду-условие if exist или команду dir.
Рекомендуется указывать имена папок с обратной наклонной чертой (backslash) , чтобы не путать с именем файла.
Если имя файла или папки содержит пробелы, его надо заключать в кавычки.
Если имя файла или папки содержит символы Unicode, которые отсутствуют в 8-битной таблице ASCII (OEM), их невозможно прописать в bat файле. Это ограничение самих bat файлов. Обходной путь – использование коротких имен 8.3. Лучше использовать PowerShell.
Решение, когда ресурс представляет собой файл, является довольно простым, как указано другими:
К сожалению, вышесказанное не работает для каталогов. Функция EXIST возвращает одинаковый результат как для отсутствующих, так и для существующих папок. К счастью, есть неясный обходной путь:
Это поведение описано в статье базы знаний Microsoft ( https://support.microsoft.com/en-us/kb/65994 ), и я подтвердил его поведение в FreeDOS 1.1 и в командной оболочке Windows 7.
ДОПОЛНИТЕЛЬНО: В статье базы знаний говорится, что этот метод также можно использовать для проверки наличия диска. Однако в случае проверки существования диска существуют следующие предостережения:
Второй
способ использования командыIF—это
проверка существования заданного файла.
Синтаксис для этого случая имеет вид:
Условие
считается истинным, если указанный файл
существует. Кавычки для имени файла не
требуются. Приведем пример командного
файла, в котором с помощью такого варианта
команды IF проверяется наличие файла,
указанного в качестве параметра командной
строки.
IF
-%1==- GOTO NoFileSpecified
IF
NOT EXIST %1 GOTO FileNotExist
::
Вывод сообщения о найденном файле
::
Файл запущен без параметров
::
Параметр командной строки задан, но
файл не найден
Аналогично
файлам команда IF
позволяет проверить наличие в системе
определенной переменной среды:
Здесь
условие DEFINED
применяется подобно условию EXISTS
наличия заданного файла, но принимает
в качестве аргумента имя переменной
среды и возвращает истинное значение,
если эта переменная определена. Например:
IF
DEFINED MyVar GOTO :VarExists
Еще
один способ использования команды IF
— это проверка кода завершения (кода
выхода) предыдущей команды. Синтаксис
для IF
в этом случае имеет следующий вид:
Здесь
условие считается истинным, если
последняя запущенная команда или
программа завершилась с кодом возврата,
равным либо превышающим указанное
число.
Рассмотрим
командный файл, который копирует файл
my.txt на диск C: без вывода на экран сообщений
о копировании, а в случае возникновения
какой-либо ошибки выдает предупреждение:
::
Проверка кода завершения копирования
IF
ERRORLEVEL 1 GOTO ErrOccurred
IF
ERRORLEVEL LEQ 1 GOTO Case1
Замечание. Иногда
более удобным для работы с кодами
завершения программ может оказаться
использование переменной%ERRORLEVEL%.(строковое
представление текущего значения кода
ошибкиERRORLEVEL).
В
командных файлах для организации циклов
используются несколько разновидностей
оператораFOR,которые
обеспечивают следующие функции:
Самый
простой вариант синтаксиса командыFORдля
командных файлов имеет следующий вид:
FOR
%%переменная IN (множество)
Перед
названием переменной должны стоять
именно два знака процента (%%),
а не один, как это было при использовании
команды FOR
непосредственно из командной строки!
Пример
5.
Если в командном файле заданы строки
то
в результате его выполнения на экран
будет выведено следующее:
на
экран будет выведено
Параметр%%переменнаяпредставляет
подставляемую переменную (счетчик
цикла), причем здесь могут использоваться
только имена переменных,
состоящие из одной буквы.
При выполнении команда FORзаменяет
подставляемую переменную текстом каждой
строки в заданном множестве, пока
команда, стоящая после ключевого слова
DO,
не обработает все такие строки.
Замечание.
Чтобы
избежать путаницы с параметрами
командного файла %0 — %9, для переменных
следует использовать любые символы
кроме 0 – 9.
Параметр
множество в команде FOR может также
представлять одну или несколько групп
файлов. Например, чтобы вывести в файл
список всех файлов с расширениями txt и
prn, находящихся в каталоге C:TEXT, без
использования команды DIR, можно
использовать командный файл следующего
содержания:
При
таком использовании команды FOR процесс
обработки продолжается, пока не
обработаются все файлы (или группы
файлов), указанные во множестве.
Соседние файлы в папке ОС 2013 2к ДО



