Windows批处理文件-IF中的日期解析不起作用



我试图在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条件或一个子程序。

最新更新