2013-04-25 50 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