Второй способ использования команды IF — это проверка существования заданного файла. Синтаксис для этого случая имеет вид:
IF [NOT] EXIST файл команда1 [ELSE команда2]
Условие считается истинным, если указанный файл существует. Кавычки для имени файла не требуются. Приведем пример командного файла, в котором с помощью такого варианта команды IF проверяется наличие файла, указанного в качестве параметра командной строки.
IF -%1==- GOTO NoFileSpecified
IF NOT EXIST %1 GOTO FileNotExist
:: Вывод сообщения о найденном файле
ECHO Файл ‘%1’ найден.
:: Файл запущен без параметров
ECHO В командной строке не указано имя файла.
:: Параметр командной строки задан, но файл не найден
ECHO Файл ‘%1’ не найден.
Проверка наличия переменной среды
Аналогично файлам команда IF позволяет проверить наличие в системе определенной переменной среды:
IF DEFINED переменная команда1 [ELSE команда2]
Здесь условие DEFINED применяется подобно условию EXISTS наличия заданного файла, но принимает в качестве аргумента имя переменной среды и возвращает истинное значение, если эта переменная определена. Например:
IF DEFINED MyVar GOTO :VarExists
ECHO Переменная MyVar не определена
ECHO Переменная MyVar определена,
ECHO ее значение равно %MyVar%
Проверка кода завершения предыдущей команды
Еще один способ использования команды IF — это проверка кода завершения (кода выхода) предыдущей команды. Синтаксис для IF в этом случае имеет следующий вид:
IF [NOT] ERRORLEVEL число команда1 [ELSE команда2]
Здесь условие считается истинным, если последняя запущенная команда или программа завершилась с кодом возврата, равным либо превышающим указанное число.
Рассмотрим командный файл, который копирует файл my.txt на диск C: без вывода на экран сообщений о копировании, а в случае возникновения какой-либо ошибки выдает предупреждение:
XCOPY my.txt C: > NUL
:: Проверка кода завершения копирования
IF ERRORLEVEL 1 GOTO ErrOccurred
ECHO Копирование выполнено без ошибок.
ECHO При выполнении команды XCOPY возникла ошибка!
В операторе IF ERRORLEVEL … можно также применять операторы сравнения чисел, приведенные в табл. 2. Например:
IF ERRORLEVEL LEQ 1 GOTO Case1
Замечание. Иногда более удобным для работы с кодами завершения программ может оказаться использование переменной %ERRORLEVEL%. (строковое представление текущего значения кода ошибки ERRORLEVEL).
как вот его можно оптимизировать, чтобы он искал по следующим путям: D(F):\videodata\camXX\mmdd, где XX — цифровое обозначение от 1 и до 99 mmdd — папки, имена которых состоят из месяца (mm) и даты (dd) »
Источник
CMD/BAT: Проверка наличия файлов (любых) в каталоге.
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Сообщения 25
1 Тема от privatbox 2013-06-18 16:34:23
Тема: CMD/BAT: Проверка наличия файлов (любых) в каталоге.
Сегодня для меня рухнула картина мироздания! Ощущаю себя как мальчик увидевший мастурбирующего папу.
Казалось бы, элементарно! Есть каталог C:\01 Проверяем:
И эта вот конструкция независимо от наличия там файлов радостно сообщает мне, что таки да, файлы там есть!
А в случае использования IF NOT EXIST с тем же завидным постоянством будет утверждать, что каталог пуст.
2 Ответ от Rumata 2013-06-18 16:40:07
Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.
* — означает любое количество символов (0 и более). Таким образом C:\01\*.* превращается в C:\01\., что указывает на каталог. А такой каталог у Вас есть. Следовательно условие верно. А вот если бы у Вас не было такого каталога, то действие было бы другое.
3 Ответ от privatbox 2013-06-18 16:50:17
Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.
Спасибо, мироздание пошатнулось, но устояло! Но как же проверить.
4 Ответ от Rumata 2013-06-18 17:21:42
Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.
5 Ответ от privatbox 2013-06-18 17:42:33
Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.
Ура! Работает. Правда не пойму, как работает 2>nul ?
6 Ответ от Rumata 2013-06-18 18:10:33
Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.
Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.
Это я понял, не понял почему именно 2>nul Что такое — эта двойка в перенаправлении вывода? Возможны ли другие значения? Извините за дотошность.
8 Ответ от Rumata 2013-06-18 19:10:31
Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.
9 Ответ от privatbox 2013-06-18 19:51:06
Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.
Благодарен безмерно. Без иронии. Спасибо!
10 Ответ от Rom5 2013-06-19 11:14:43
Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.
11 Ответ от wisgest 2013-06-19 11:50:01
Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.
Если ничего подобного не было, то, полагаю, что решение Rumata следует добавить в коллекцию.
Заинтересовал, правда, похожий вопрос: как проверить наличие подкаталогов или содержимого любого рода — ничего кроме FOR на ум не приходит.
12 Ответ от Rom5 2013-06-19 12:16:06 (изменено: Rom5, 2013-06-19 12:20:23)
Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.
как проверить наличие подкаталогов
. Возможно, что есть смысл поиграться с заменой ключей «dir c:\01 /a-d . » на «dir c:\01 /ad /b . «
13 Ответ от wisgest 2013-06-19 12:48:20
Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.
Возможно, что есть смысл поиграться с заменой ключей «dir c:\01 /a-d . » на «dir c:\01 /ad /b . «
Уже пробовал — не работает.
14 Ответ от Rumata 2013-06-19 13:22:28
Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.
Работает. Каталоги pub и incoming — пустые
15 Ответ от alexii 2013-06-19 13:26:10
Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.
16 Ответ от wisgest 2013-06-19 13:47:07 (изменено: wisgest, 2013-06-19 13:47:45)
Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.
Не устанавливает код ошибки при отсутствии подкаталогов. _ alexii, это хорошо, но всё-таки используется внешняя команда.
17 Ответ от alexii 2013-06-19 13:50:26
Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.
Не устанавливает код ошибки при отсутствии подкаталогов.
То же самое: каталоги «.»,«..» присутствуют.
alexii, это хорошо, но всё-таки используется внешняя команда.
А я не стесняюсь пользовать .
18 Ответ от FlashMan 2013-11-01 14:31:19 (изменено: FlashMan, 2013-11-01 22:29:39)
Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.
Доброго времени суток! Помогите пожалуйста, вчера до 4 утра сидел, так и не понял в чем проблема. Создал CMD-шник со следующим фрагментом:
Выдает ошибку: «Непредвиденное появление: /gray.». Убираешь /gray начинает на /convert ругаться и т.д. и т.п. Вообщем не в наборе параметров дело. Просто из командной строки этот набор параметров работает.
Заработало только так:
НО! Во-первых, код с использованием меток не изящный и плохо читаемый, во-вторых, нет возможности в лог поместить информацию о том, что файлы не были найдены, и в-третьих, мне хочется понять, что я неправильно написал в предыдущих двух вариантах.
Помогите, кто знает.
19 Ответ от ypppu 2013-11-01 17:27:14
Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.
FlashMan, обрамляйте код скриптов тегом «code»!
20 Ответ от FlashMan 2013-11-01 18:16:27 (изменено: FlashMan, 2013-11-01 22:31:00)
Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.
2 ypppu, спасибо за наводку!
Опишу, если кому-нибудь понадобится. Правда я не совсем понял, как пользоваться кавычками, но подсказка помогла понять, что ()-скобки — это же операторские скобки, поэтому, если они присутствуют в параметрах, перед ними надо ставить знак ^. Вот пример моего работающего кода кода:
, т.е. перед каждой скобкой: ^(100,100^)
Всем удачи! Ypppu еще раз спасибо за оперативность, вчера всю ночь на это убил.
21 Ответ от ypppu 2013-11-01 18:46:23
Re: CMD/BAT: Проверка наличия файлов (любых) в каталоге.
FlashMan, пожалуйста. Но Вы должны отредактировать сообщение #18 и сообщение #20 в этой теме.