我不认为下面的batch file需要enableDelayedExpansion
但不知何故,我忽略了for循环内嵌套的if / else树的问题。
我已经使用::
评论了预期的操作。
它会进入“prepend 0”(当%%b
为空时,我预计less于10)或“无前置”子句。
给定这个batch file:
setlocal enableDelayedExpansion for /F "tokens=1,2 delims==" %%a IN ('wmic path Win32_LocalTime get * /format:list ^| findstr "="' ) do ( echo wmic_%%a=%%b if "%%b"=="" ( :: empty becomes 00 set wmic_%%a=00 ) else ( if %%b LSS 10 ( :: 0 prepend set wmic_%%a=0%%b ) else ( :: no prepend set wmic_%%a=%%b ) ) ) set | findstr "wmic_" endlocal
wmic声明给出了这样一个列表:
Day=21 DayOfWeek=4 Hour=15 Milliseconds= Minute=4 Month=5 Quarter=2 Second=22 WeekInMonth=4 Year=2015
我想把这个扩展到这个:
wmic_Day=21 wmic_DayOfWeek=04 wmic_Hour=15 wmic_Milliseconds=00 wmic_Minute=02 wmic_Month=05 wmic_Quarter=02 wmic_Second=22 wmic_WeekInMonth=04 wmic_Year=2015
但是我有这样的非零扩展variables:
wmic_Day=21 wmic_DayOfWeek=4 wmic_Hour=15 wmic_Milliseconds=0 wmic_Minute=2 wmic_Month=5 wmic_Quarter=2 wmic_Second=22 wmic_WeekInMonth=4 wmic_Year=2015
我同意SomethingDark。 ::
不应该在括号内使用。
另外,我认为问题的一部分是从WMI查询返回的值的编码是在UCS-2 Little Endian中进行编码的,这对ANSI运行时来说很奇怪。 我找到了解决这个问题的方法,使用set /a
,为每个值添加.0
(这是立即删除的,因为set /a
只计算整数)和黑洞错误信息。
@echo off setlocal enabledelayedexpansion for /f "delims=" %%I in ('wmic path win32_localtime get * /format:list ^| findstr "="') do ( 2>NUL set /a "wmic_%%I.0" ) for /f "tokens=1,2 delims==" %%I in ('set wmic_') do ( if %%J leq 9 set "%%I=0%%J" ) set wmic_
这是丑陋的,但它似乎产生你想要的输出。 我想,最后证明了手段。 🙂