#batch-file
Вопрос:
Я новую партию программист, и я пытаюсь использовать if
команду goto
, у меня есть код выше, который я позаимствовал для определения дня, а затем я хочу использовать это для запуска определенных команд, другой для каждого дня, я проверял это, но это в конечном итоге работает все они один за другим, что я делаю неправильно здесь?
if %dow% EQU 0 goto Sunday
if %dow% EQU 1 goto Monday
if %dow% EQU 2 goto Tuesday
if %dow% EQU 3 goto Wednesday
if %dow% EQU 4 goto Thursday
if %dow% EQU 5 or 6 goto Friday or Saturday
timeout 100
:Sunday
Echo sunday
Timeout 100
Exit
:Monday
Echo Monday
Timeout 100
Exit
:Tuesday
Echo Tuesday
Timeout 100
Exit
:Wednesday
Echo Wednesday
Timeout 100
Exit
:Thursday
Echo Thursday
Timeout 100
Exit
:Friday or Saturday
Echo Weekend
Timeout 100
Exit
Комментарии:
1. если вы новичок, то серьезно просто изучите powershell. Избегайте cmd с неприятными унаследованными дефектами
2. вместо всех этих
if
s я бы сделалgoto :label%dow%
и переопределил ярлыки, такие как:label0 Sunday
(где словоSunday
просто игнорируется и служит только для удобства чтения человеком)
Ответ №1:
if %dow% EQU 5 or 6 goto Friday or Saturday
Это неправильно. Запустите if /?
, и вы увидите, что синтаксис
IF [/I] string1 compare-op string2 command
Так что очевидно, что там нет никакого «или». Кроме goto Friday or Saturday
того, в этом нет никакого смысла! Как вы можете перейти на обе позиции? Или вы хотите выбрать случайную позицию? В этом еще меньше смысла.
Хорошо, я перечитал код, и оказалось, что вы определяете метку как :Friday or Saturday
. Это так не работает. В метке не может быть пробелов:
label A predefined label in the batch program. Each label must be defined on a line by itself, beginning with a colon and ending with either a space, a colon or a CR/LF.
Для этого вам понадобятся отдельные сравнения:
if %dow% EQU 5 goto Friday_or_Saturday
if %dow% EQU 6 goto Friday_or_Saturday
:Friday_or_Saturday
Ответ №2:
Пакетные функции должны заканчиваться goto :eof
или exit /b
, автоматическое определение конца function
if %dow% EQU 0 goto Sunday
if %dow% EQU 1 goto Monday
...
exit /b
:Sunday
Echo sunday
exit /b
:Monday
echo Monday
exit /b
Ответ №3:
Спасибо за вашу помощь, я использовал оба ваших предложения, и это сработало, вот новый код и спасибо агину за вашу помощь!
if %downum% EQU 0 goto Sunday
if %downum% EQU 1 goto Monday
if %downum% EQU 2 goto Tuesday
if %downum% EQU 3 goto Wednesday
if %downum% EQU 4 goto Thursday
if %downum% GEQ 5 goto Weekend
timeout 100
:Sunday
Echo sunday
Timeout 100
Exit
:Monday
Echo Monday
Timeout 100
exit /b
:Tuesday
Echo Tuesday
Timeout 100
exit /b
:Wednesday
Echo Wednesday
Timeout 100
exit /b
:Thursday
Echo Thursday
Timeout 100
exit /b
:Friday or Saturday
Echo Weekend
Timeout 100
exit /b