2013-04-25 51 views
0

任何人都可以解释以下对我说:任何人都可以使用 “%〜T1” 解释这种奇怪的批生产行为并获得溶液

验证码:

@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”?

我尝试了以下内容:

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

但是,这并不工作,因为“〜T2”似乎只与拥有完整 路径和文件名一起变量工作。

回答

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 
+0

非常感谢。而已。 – CleanaZ 2013-04-25 14:52:28

2

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

你有什么原因让你禁用延迟扩展?解决此问题的一种方法是启用延迟扩展(将SETLOCAL disabledelayedexpansion替换为SETLOCAL enabledelayedexpansion)并将%_result%更改为!_result!

+0

谢谢你的解释。看@foxidrive的答案,解决方案非常简单,但我无法掌握它。 – CleanaZ 2013-04-25 14:51:43