【问题标题】:Nested FOR statement in IF ELSEIF ELSE 中的嵌套 FOR 语句
【发布时间】:2015-06-25 11:28:12
【问题描述】:

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

我正在读取用于定义软件版本的变量。如果指定了版本,则可以使用。但是,如果它是空白的,我会寻找最高文件夹编号。

到目前为止我有:

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

但是,如果变量为空,则它不起作用并去寻找最高的文件夹编号。我会认为这是因为 FOR 语句中的 () 以及 IF ELSE () 中的。有没有像 ^('dir /b /ad /on *'^) 这样的转义字符,例如

【问题讨论】:

  • 添加语言标签。
  • 使用IF "%Softupgradeversion%"=="" ( .. 即在可能的空值周围加上双引号。此外,将来,您应该发布您实际获得的内容,而不仅仅是“它不起作用”。

标签: batch-file if-statement for-loop


【解决方案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%"
"& > < |"

【讨论】:

  • 感谢在 if "%Softupgradeversion%"=="" 中使用了正确的双引号。同样如上所述“使用 IF "%Softupgradeversion%"=="" ( .. 也就是说,在可能的空值周围加上双引号"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-14
  • 1970-01-01
相关资源
最近更新 更多