2015-06-25 140 views
0

是否可以将FOR语句嵌套到IF ELSE语句中?在IF ELSE中嵌套的FOR语句

我正在读取定义软件版本的变量。如果有指定的版本,哪个可以工作。但是,如果它是空白的,我会寻找最高的文件夹号码。

到目前为止,我有:

IF %Softupgradeversion%=="" (
for /f "tokens=*" %%1 in ('dir /b /ad /on *') do (set latestdir=%%1 
)) ELSE (
    SET latestdir=%Softupgradeversion% 
    ) 

但是如果变量是空白的它不工作,去寻找最高的文件夹编号。我会尽管这是因为()在FOR语句中,以及它在IF ELSE()中。有没有像转义字符可以工作像^(“DIR/B /广告/上*” ^)例如

+0

添加的语言标记。 –

+0

使用'IF'%Softupgradeversion%“==”“('..也就是说,用可能为空的值的双引号括起来,并且将来你应该发布你实际得到的内容,而不仅仅是”它不会“ t“工作” – TripeHound

回答

1

变量为空白谓词相当于变量没有定义,例如在命令行方面:

==>set Softupgradeversion 
Environment variable Softupgradeversion not defined 

要检查的批处理脚本谓:

if "%Softupgradeversion%"=="" (
    echo Softupgradeversion is empty 
) else (
    echo "%Softupgradeversion%" 
) 

if not defined Softupgradeversion (
    echo Softupgradeversion is empty 
) else (
    echo "%Softupgradeversion%" 
) 

注意在if "%Softupgradeversion%"==""适当双引号。

实际上,if €%Softupgradeversion%€==€€甚至if €%Softupgradeversion%==€与几乎任何字符代替的效果几乎相同。然而,双引号是为变量的最安全的方法可以包含空格,甚至一些CLI-特殊字符应该是escaped如下:

==>set "unusual=a space" 

==>if "%unusual%"=="a space" echo good 
good 

==>if [%unusual%]==[a space] echo good 
space]==[a was unexpected at this time. 

甚至

==>set "unusual=& > < |" 

==>set unusual 
unusual=& > < | 

==>echo "%unusual%" 
"& > < |" 
+0

感谢这是使用适当的双引号如果“%Softupgradeversion%”==“”的工作 也如上面提到的“使用IF”%Softupgradeversion%“==”“(.. that是,用可能的空值附近的双引号“ –