Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 为什么这个.bat cmd总是命中我不希望它命中的子例程?_Batch File - Fatal编程技术网

Batch file 为什么这个.bat cmd总是命中我不希望它命中的子例程?

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\

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\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进一步抵消了你的否决票。我看不出一开始它被否决的原因。“这是一个有道理的问题。”谢谢你,我的想法也是如此!