0

谁能向我解释以下内容:

编码:

@echo off
SETLOCAL disabledelayedexpansion

set pf=C:
set url=http://www.rarlab.com/rar
set fn=config.sys

call :SUB1 "%url%" "%fn%"
goto :EOF

:SUB1
echo:PATH=[ %pf%\%~2 ]
if exist %pf%\%~2 (call :READDATE "%pf%\%~2") & set "_datum1=%_result%"
echo:Date1=[ %_datum1% ]
if exist %pf%\%~2 (call :READDATE "%pf%\%~2") & set "_datum2=%_result%"
echo:Date2=[ %_datum2% ]
goto :EOF

:READDATE
SETLOCAL
for %%A in (%~1) do set "_tvar=%%~tA"
echo:Date=[ %_tvar% ]
ENDLOCAL & set "_result=%_tvar%"
exit /b 0 

:end

输出:

PATH=[ C:\config.sys ]
Date=[ 10.06.2009 23:42 ]
Date1=[  ]
Date=[ 10.06.2009 23:42 ]
Date2=[ 10.06.2009 23:42 ]

因此,如果您查看输出的第 3 行,则没有日期/时间 - 为什么 ????? 如果这不是 CMD.EXE 的大错误,任何人都可以帮我解决问题。我需要两个日期/时间数据进行比较。

附录:

是否有可能在不使用第二个“READDATE”的情况下读取第一个“sub”中的日期/时间?

我尝试了以下方法:

if exist %pf%\%~2 set "_datum1=%pf%\%~t2"

但这不起作用,因为“~t2”似乎只适用于将完整路径和文件名保存在一起的变量。

4

2 回答 2

2

问题的发生是因为%_result%首先评估并在命令if exist %pf%\%~2 (call :READDATE "%pf%\%~2") & set "_datum1=%_result%"运行之前输入它的值。所以对于第一个你没有结果,对于第二个你得到第一个的结果。

您禁用延迟扩展是否有原因?解决此问题的一种方法是启用延迟扩展(通过替换SETLOCAL disabledelayedexpansionSETLOCAL enabledelayedexpansion)并更改%_result%!_result!.

于 2013-04-25T10:59:02.190 回答
1
@echo off
SETLOCAL disabledelayedexpansion

set pf=C:
set url=http://www.rarlab.com/rar
set fn=config.sys

call :SUB1 "%url%" "%fn%"
goto :EOF

:SUB1
echo:PATH=[ %pf%\%~2 ]
if exist %pf%\%~2 (call :READDATE "%pf%\%~2")
set "_datum1=%_result%"
echo:Date1=[ %_datum1% ]
if exist %pf%\%~2 (call :READDATE "%pf%\%~2")
set "_datum2=%_result%"
echo:Date2=[ %_datum2% ]
goto :EOF

:READDATE
SETLOCAL
for %%A in (%~1) do set "_tvar=%%~tA"
echo:Date=[ %_tvar% ]
ENDLOCAL & set "_result=%_tvar%"
exit /b 0 

:end
于 2013-04-25T14:04:02.780 回答