Batch file 为什么这个.bat cmd总是命中我不希望它命中的子例程?
BAT文件中包含以下内容:Batch file 为什么这个.bat cmd总是命中我不希望它命中的子例程?,batch-file,Batch File,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\
@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\u write\u files
子程序。我假设缺陷存在于条件逻辑中。主要问题是代码的语法完全错误
IF语句只接受一个条件,不能将它们与或或和组合使用
不允许使用括号放弃条件。
起始块必须在同一行上开始,也适用于ELSE
子句。
一个集合。。。varname=
在varname和等号之间加一个空格,创建一个名为varname
的变量
但是您的代码的其余部分应该可以工作
在我看来,这个逻辑似乎很合理
如果/?
,可能需要一个简单的。您需要重新学习批处理语法。通过在命令提示符下键入Help command
或command/?
,几乎可以为每个命令提供帮助。例如,HELP IF
将提供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语句中,这样情况就不重要了。或者,如果输入了无效值,您可能希望返回并重试,而不是结束。谢谢,我确实需要重新学习语法。我希望我不是因为问了一个问题就被否决了question@some_bloody_fool-不是我否决了这个问题。+1进一步抵消了你的否决票。我看不出一开始它被否决的原因。“这是一个有道理的问题。”谢谢你,我的想法也是如此!