我试图从批处理文件中的 for/f
循环中获取一个简单的值。
使用命令 wmic path win32_localtime get dayofweek
给我输出:
C:\sendemail>wmic path win32_localtime get dayofweek
DayOfWeek
1
C:\sendemail>
因此,使用以下批处理脚本,我应该能够返回结果“1”:
set cmd=wmic path win32_localtime get dayofweek
for /f "tokens=1 skip=1" %%Z in ('%cmd%') do set _myday=%%Z
echo Var is %_myday%
但我没有,它至少设置变量两次,如下所示:
C:\sendemail>set cmd=wmic path win32_localtime get dayofweek
C:\sendemail>for /F "tokens=1 skip=1" %Z in ('wmic path win32_localtime get dayofweek') do set _myday=%Z
C:\sendemail>set _myday=1
:\sendemail>set _myday=
C:\sendemail>echo Var is
Var is
C:\sendemail>
起初,我想知道为什么,然后我意识到循环正在处理这两个空行……这是不应该的。根据这个:http://ss64.com/nt/for_cmd.html
Skip SKIP will skip processing a number of lines from the beginning of the file. SKIP includes empty lines, but after the SKIP is complete, FOR /F ignores (does not iterate) empty lines.
要么,它没有正常工作,要么那些行不是空白,而是填充了一些东西......
无论如何,我怎样才能从中得到星期几的结果,而忽略其余的呢?
最佳答案
关于行内容,是的,wmic
的输出在每行的末尾包含一个额外的回车符,该字符由 for
命令检测到。这就是您的非空行的原因。
你可以试试
for /f "tokens=2 delims==" %%Z in ('
wmic path win32_localtime get dayofweek /value
') do for /f %%Y in ("%%Z") do set "_myday=%%Y"
代码要求 wmic
以 key=value
格式返回信息,并使用等号标记输入记录。由于我们只请求第二个标记,for
将只处理返回至少两个标记的行,具有键(第一个标记)、等号(分隔符)和值(第二个标记)的行
但是,行尾的额外回车也包含在变量的值中。
当变量以正常语法(%_myday%
)使用时,它是看不到的,但使用延迟扩展(!_myday!
)时,额外的回车将是附和。
为了从变量中删除这个额外的字符,在发布的代码中使用了第二个 for
命令。
关于windows - 为什么 for/f 不忽略空行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31315629/