Что именно здесь не так?

#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.
 

https://ss64.com/nt/goto.html

Для этого вам понадобятся отдельные сравнения:

 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