Описание
При попытке вывести на экран Init has already been made
, если файл init.marker
новее, чем файлы setup.py
и setup.cfg
с использованием пакетного сценария Windows (, гдеприведенный ниже код взят из ):
FOR /F %%i IN ('DIR /B /O:D init.marker setup.py setup.cfg') DO SET last_modified_file=%%i
IF "%last_modified_file%"=="init.marker"(
ECHO Init has already been made
)
Я обнаружил ошибку The syntax of the command is incorrect.
.
Откуда произошла ошибка
Допустим, мызаписал вышеупомянутый пакетный скрипт в файл с именем make_init.cmd
, который находится в том же каталоге, что и файлы init.marker
, setup.py
, setup.cfg
. (Мы можем создать эти файлы, используя Batch Script, см. [1]. Проверьте этот ответ для получения дополнительной информации о том, как создавать пустые файлы, используя Batch Script.) Давайте использовать cmd.exe для его запуска, которыйдает нам следующий вывод:
User> make_init.cmd
User> FOR /F %i IN ('DIR /B /O:D init.marker setup.py setup.cfg') DO SET last_modified_file=%i
User> SET last_modified_file=init.marker
User> SET last_modified_file=setup.py
User> SET last_modified_file=setup.cfg
The syntax of the command is incorrect.
User> IF "setup.cfg"=="init.marker" (
Давайте сначала посмотрим, работает ли наш оператор FOR так, как задумано, запустив тот же сценарий, но заменив оператор IF для простого оператора ECHO. (См. [2])
Вывод - это то, что мы ожидаем:
User> make_init.cmd
User> COPY /B NUL 1>init.marker
User> COPY /B NUL 1>setup.py
User> COPY /B NUL 1>setup.cfg
User> FOR /F %i IN ('DIR /B /O:D init.marker setup.py setup.cfg') DO SET last_modified_file=%i
User> SET last_modified_file=init.marker
User> SET last_modified_file=setup.py
User> SET last_modified_file=setup.cfg
User> ECHO setup.cfg
setup.cfg
Насколько я понимаю, это означает, что упомянутая неправильная команда должна быть
IF "%last_modified_file%"=="init.marker" (
, котораяоценивается как IF "setup.cfg"=="init.marker" (
Почему же при любых других обстоятельствах (см. [3]) такое утверждение IF полностью допустимо?
Вопрос
Что не так с синтаксисом приведенной выше команды IF?
Вложения
[1] Расширение скрипта для создания необходимых файлов.
COPY /B NUL > init.marker
COPY /B NUL > setup.py
COPY /B NUL > setup.cfg
FOR /F %%i IN ('DIR /B /O:D init.marker setup.py setup.cfg') DO SET last_modified_file=%%i
IF "%last_modified_file%"=="init.marker"(
ECHO Init has already been made
)
[2] Замените оператор IF на оператор ECHO
COPY /B NUL > init.marker
COPY /B NUL > setup.py
COPY /B NUL > setup.cfg
FOR /F %%i IN ('DIR /B /O:D init.marker setup.py setup.cfg') DO SET last_modified_file=%%i
ECHO %last_modified_file%
[3] Простой тестовый скрипт для оператора IF
:: Filename: test_if.cmd
:: How to execute: test_if.cmd hello
IF "%1"=="hello" (
SET the_greeting_message=Greetings, traveller.
)
IF "%the_greeting_message%"=="Greetings, traveller." (
ECHO %the_greeting_message%
)