Одной из наиболее важных возможностей любого языка программирования является возможность выбора из нескольких разных операторов на основе условий, сложившихся в процессе выполнения программы. Для этой цели в языке пакетных файлов имеется команда if. В своей самой общей форме команда if проводит сравнение двух строк и выполняет команду, если строки совпадают: if Строка 1 == Строка2 команда
Эта команда используется в сочетании с переменными командной строки или с подстановкой переменных среды окружения, как показано в следующем примере: if "%1" == "ERASE" delete somefile. dat
Только в том случае, если в качестве первого аргумента командной строки использовалось слово ERASE, эта команда удаляет файл somefile. dat. Наличие кавычек в этой команде не является безусловным требованием. Если они опущены и команда записана в виде if %1 == ERASE delete somefile. dat она по-прежнему будет работать, пока при запуске пакетного файла будет указываться какой-нибудь аргумент командной строки. Но если пакетный файл запускается без аргументов, обозначение %1 ничем не заменяется, и команда приобретает следующий вид: if == ERASE delete somefile. dat
Это недопустимая команда. Оболочка CMD ожидает увидеть что-нибудь перед частью команды, начинающейся с ==, и «ругается», если там ничего нет. Поэтому сложилась такая практика: ставить вокруг тестируемого элемента какой-нибудь символ, неважно какой именно. Работает даже символ $: if $%0$ == $ERASE$ delete somefile. dat
Если проверяемые элементы идентичны, они останутся идентичными, будучи окруженными дополнительными символами. Если они отличаются или являются незаполненными, команда все равно остается допустимой.
Команда if также позволяет изменять смысл проверки на противоположный с помощью варианта not: if not "%1" == файлу и можно воспользоваться переменными среды окружения и аргументами обозначения % для составления имени. Если в имени файла есть пробелы, его нужно заключить в кавычки. В варианте exist может также использоваться модификатор not, как в команде if not exist Имя_файла.