Почему этот .bat cmd всегда выполняет подпрограмму, которую я не собираюсь использовать? - PullRequest
2 голосов
/ 02 февраля 2012

У меня есть следующее в BAT-файле:

@echo off

Set /P _environment = Please Enter Environment [d] for Development or [a] for Acceptance:

IF ((%_environment% EQU "a") OR (%_environment% EQU "d"))
(goto sub_write_files)
ELSE
(goto end)


:sub_write_files
xcopy script_temp\* \\CHU-%_environment%101\CHU\scripts /D /E /C /R /I /K /Y /S
:end
echo %_environment% Done

Логика кажется мне правильно сформированной, но, возможно, это не потому, что подпрограмма sub_write_files каждый раз, когда я запускаю эту команду.Я предполагаю, что недостаток заключается в условной логике.

Ответы [ 2 ]

2 голосов
/ 02 февраля 2012

Вам нужно освежить свой синтаксис пакета.Справка доступна практически для каждой команды, набрав либо HELP command, либо command /? в командной строке.Например, HELP IF предоставит справку по команде IF.Конечно, документация часто неполная и / или запутанная, но это только начало.

У вас много проблем с вашим синтаксисом, как написано.Одним из наиболее очевидных является то, что ЕСЛИ не поддерживает такие операторы, как AND, OR, XOR и т. Д.

Вы можете достичь логики, которую вы искали, с помощью следующей

@echo off

Set /P _environment = Please Enter Environment [d] for Development or [a] for Acceptance:

if "%_environment%" neq "a" if "%_environment%" neq "d" goto :end
:sub_write_files
echo xcopy script_temp\* \\CHU-%_environment%101\CHU\scripts /D /E /C /R /I /K /Y /S
:end
echo %_environment% Done

Есть многопотенциальных улучшений.Например, вы можете добавить опцию /I в оба оператора IF, чтобы регистр не имел значения.Или, возможно, вы захотите вернуться назад и повторить попытку вместо завершения, если введено неверное значение.

1 голос
/ 02 февраля 2012

Основная проблема - полный неверный синтаксис вашего кода.

IF-Statement принимает только одно условие, вы не можете комбинировать их с OR или AND.
Запрещено сдавать условие в скобках.
Начальный блок должен начинаться с той же строки, также для предложения ELSE.
A set ... varname= с пробелом между varname и знаком равенства создает переменную с именем varname<space>.

Но остальная часть вашего кода должна работать ...

Логика кажется мне хорошо сформированной

Возможно, простой IF /? исправит это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...