Ste*_*ese 5 windows for-loop batch-file
我试图从for /f批处理文件中的循环中获取一个简单的值.
使用该命令wmic path win32_localtime get dayofweek为我提供输出:
C:\sendemail>wmic path win32_localtime get dayofweek
DayOfWeek
1
C:\sendemail>
Run Code Online (Sandbox Code Playgroud)
因此,使用以下批处理脚本,我应该能够返回"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%
Run Code Online (Sandbox Code Playgroud)
但我没有,它将变量设置至少两次,如下所示:
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>
Run Code Online (Sandbox Code Playgroud)
起初,我想知道为什么,然后我意识到循环正在处理两个空行...它不应该是.根据这个:http://ss64.com/nt/for_cmd.html
跳过SKIP将跳过从文件开头处理多行的操作.SKIP包含空行,但在SKIP完成后,FOR/F忽略(不迭代)空行.
或者,它不能正常工作,或者这些线不是空白的,并且充满了某些东西......
无论如何,我如何得到一周中的一天结果,而忽略其余的?
关于行内容,是的,输出来自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"
Run Code Online (Sandbox Code Playgroud)
代码要求wmic以key=value格式返回信息并使用等号来标记输入记录.由于我们只请求第二个令牌,for因此只处理返回至少两个令牌的行,具有键(第一个令牌),等号(分隔符)和值(第二个令牌)的行
但是,该行末尾的附加回车也包含在变量的值中.
当变量与普通语法(%_myday%)一起使用时,它不会被看到,但是如果延迟扩展(!_myday!),则会回显附加回车符.
要从变量中删除此附加字符,for已在发布的代码中使用了第二个命令.
这种轻微的中间化将会起作用:
@ECHO OFF
set cmd=wmic path win32_localtime get dayofweek
for /f "tokens=1 skip=1" %%Z in ('%cmd%') do (
set _myday=%%Z
GOTO BREAK
)
:BREAK
echo Var is %_myday%
PAUSE
Run Code Online (Sandbox Code Playgroud)
读取所需行后,只需跳出循环即可。
| 归档时间: |
|
| 查看次数: |
1798 次 |
| 最近记录: |