批处理文件中的if-else条件

时间:2014-06-10 11:00:52

标签: c windows batch-file

我需要将下一个代码(C语言)条件转换为批处理文件:

if(version == 1 || version == 2)
{
   // do something
}
else
{
   // do something other
}

所以在批处理文件中它看起来像:

if "%version%"==1 (
 // do something
)
if "%version%"==2 (
 // do something
)
if not "%version%"==1 (
   // do something other
)
if not "%version%"==2 (
   // do something other
)

有没有更好的方法来写它?

3 个答案:

答案 0 :(得分:1)

"没有逻辑和/或你可以使用强大的转到。

if "%version%"=="1" goto :TRUE
if "%version%"=="2" goto :TRUE
REM do something else

echo neither 1 or 2 :(
goto :eof

:TRUE 
REM do something
echo 1 or 2 :)

答案 1 :(得分:1)

setlocal EnableDelayedExpansion

set wantedVersions=/1/2/

if "!wantedVersions:/%version%/=!" neq "%wantedVersions%" (
   echo Version %version% is 1 or 2, do something
) else (
   echo Version %version% is NOT 1 or 2, do something other
)

此表达式:"!wantedVersions:/%version%/=!"表示:"在wantedVersion中消除字符串" /%version%/&#34 ;;这样,如果版本是1或2,那么该值将被消除,结果将不同于原始值=> version是1或2.需要斜杠以避免错误识别version = 12。

是的,我知道这种方法看起来很复杂,但它比其他选项更简单。试着想象一下,如果你有3个不同的值,那么其他选项应该如何,或者4 ...而且,这个方法可以嵌套在其他IF / FOR命令中,没有任何问题。

答案 2 :(得分:0)

采用与@Aacini的回答相同的哲学的另一种方式

@ECHO OFF
set /p $var=version ? : 

set "$version=[1] [2]"
echo %$version% | find "[%$var%]" && echo do something || echo do something else