Batch file 带条件的批处理转到

Batch file 带条件的批处理转到,batch-file,cmd,Batch File,Cmd,我想调用参数为true的特定子例程。如果两个参数都为false,则退出。我尝试过不同的方法,但我找不到解决问题的方法 我有以下情况: echo OFF set APP=TRUE set BPP=TRUE IF /i "%APP%"=="true" goto sub1 IF /i "%APP%"=="true" goto sub2 echo Both are set false goto CLOSE :sub1 echo This is sub1 :sub2 echo This is su

我想调用参数为true的特定子例程。如果两个参数都为false,则退出。我尝试过不同的方法,但我找不到解决问题的方法

我有以下情况:

echo OFF
set APP=TRUE
set BPP=TRUE

IF /i "%APP%"=="true" goto sub1
IF /i "%APP%"=="true" goto sub2

echo Both are set false
goto CLOSE

:sub1
echo This is sub1

:sub2
echo This is sub2

:CLOSE
echo Nothing is selected 
exit /B 1
该场景如下所示: 如果ONLY APP为true,我只希望执行sub1,如果ONLY BPP为true,那么我只希望sub2为executen。如果APP和BPP都为true,则必须首先执行sub1,然后执行sub2。但是,如果APP和BPP都设置为false,则必须执行关闭

提前感谢。

这应该可以做到:

echo OFF
set APP=TRUE
set BPP=TRUE

IF /i "%APP%"=="true" goto sub1
IF /i "%BPP%"=="true" goto sub2

echo Both are set false
goto CLOSE

:sub1
echo This is sub1
IF /i "%BPP%"=="false" goto CLOSE

:sub2
echo This is sub2

:CLOSE
echo Nothing is selected 
exit /B 1
注意sub1末尾添加的条件。

使用返回而不是goto的调用。此外,您忘了结束子例程,因此代码将运行:

echo OFF
set APP=TRUE
set BPP=TRUE

if /i "%APP%%BPP%"=="falsefalse" (
  echo Both are set false
  echo Nothing is selected 
  exit /B 1
)   
IF /i "%APP%"=="true" call :sub1
IF /i "%BPP%"=="true" call :sub2
echo done.
exit /b 0

:sub1
echo This is sub1
goto :eof

:sub2
echo This is sub2
goto :eof

您只需在:sub1:

@回音 设置APP=TRUE 设置BPP=TRUE 如果/I%APP%==true转到:sub1 如果/I%BPP%==真转到:sub2 这两个参数都设置为FALSE 后藤:结束 :sub1 这是:sub1 如果/I不是%BPP%==真转到:结束 :sub2 这是:sub2 后藤:结束 :关闭 未选择任何回显 退出/B 1 :结束 echo至少有一个设置为TRUE 或者您可以反转if查询,有条件地跳过代码部分;要检测是否跳过了代码段:sub1和:sub2,可以使用类似于标志的变量:

@回音 设置APP=TRUE 设置BPP=TRUE 设旗= 如果/I不是%APP%==true转到:sub2 :sub1 这是:sub1 设旗= 如果/I不是%BPP%==真转到:跳过 :sub2 这是:sub2 设旗= :跳过 如果定义了标志goto:end 这两个参数都设置为FALSE :关闭 未选择任何回显 退出/B 1 :结束 echo至少有一个设置为TRUE 您还可以通过调用替换goto,并使用flag样式变量如下所示:

@回音 设置APP=TRUE 设置BPP=TRUE 设旗= 如果/I%APP%==true调用:sub1 if/I%BPP%==真调用:sub2 如果定义了标志goto:end 这两个参数都设置为FALSE 后藤:结束 :sub1 这是:sub1 设旗= 后藤:EOF :sub2 这是:sub2 设旗= 后藤:EOF :关闭 未选择任何回显 退出/B 1 :结束 echo至少有一个设置为TRUE
这是简单的编程逻辑。编程的基础是简单的逻辑。所以你应该按照容易的顺序进行测试。因此,如果/i%APP%==true如果/i%BPP%==true转到whichersubfortware并按正确的顺序进行测试。第二个IF/i%APP%==true应该实际读取IF/i%BPP%==true,对吗?不,这是4行中的第一行。