我试图在IF语句中解析日期,我的实际代码比下面引用的代码稍微复杂一些(我会使用EnableDelayedExpansion
),但日期解析对我来说仍然很奇怪。
"ECHO"命令的预期输出应该是在我上次尝试BK_20141111_1030.7z时,但它显示为BK_2014111_10:30.7z。如果我移动线
Set PARSEARG="eol=; tokens=1,2,3* delims=:, "
在IF语句之外,输出将正确显示。是否可以解析IF子句中的分隔符?
DATE /T
以GG/MM/YYYY(或MM/GG/YYYY)格式存储数据TIME /T
以HH:mm 格式存储时间
@echo off
:cmpct
Set CURRDATE=%TEMP%CURRDATE.TMP
Set CURRTIME=%TEMP%CURRTIME.TMP
DATE /T > %CURRDATE%
TIME /T > %CURRTIME%
Set PARSEARG="eol=; tokens=1,2,3,4* delims=/, "
For /F %PARSEARG% %%i in (%CURRDATE%) Do SET YYYYMMDD=%%k%%j%%i
if 1==1 (
Set PARSEARG="eol=; tokens=1,2,3* delims=:, "
For /F %PARSEARG% %%i in (%CURRTIME%) Do Set HHMM=%%i%%j%%k
echo BK_%YYYYMMDD%_%HHMM%.7z
)
)
@echo off
:cmpct
Set PARSEARG="eol=; tokens=1,2,3,4* delims=/, "
For /F %PARSEARG% %%i in ("%DATE%") Do SET YYYYMMDD=%%k%%j%%i
rem echo %time%
setlocal enableDelayedExpansion
if 1==1 (
For /F "eol=; tokens=1,2,3* delims=:, " %%i in ("%time%") Do (
Set HHMM=%%i%%j%%k
echo BK_%YYYYMMDD%_!HHMM!.7z
rem %time%
)
)
if 2==2 (
For /F "eol=; tokens=1,2,3* delims=:, " %%i in ("%time%") Do (
Set HHMM=%%i%%j%%k
echo BK_%YYYYMMDD%_!HHMM!.7z
rem %time%
)
)
endlocal
编辑
我看到了你的备忘录并更新了我的答案。不能将延迟展开的FOR
命令参数化。
CCD_ 5在脚本解析期间被扩展。
CCD_ 6(延迟扩展)在执行期间被扩展。
但是FOR
命令在解析过程中会检查它的语法,所以使用FOR !options!
总是会导致解析错误。因此,您唯一的选择是多个IF
条件或一个子程序。