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 の大きなバグでない場合は、誰でも問題の解決を手伝ってください。比較のために両方の日付/時刻データが必要です。

補遺:

2番目の「READDATE」を使用せずに、最初の「サブ」で日付/時刻を読み取ることは何とか可能ですか??

私は次のことを試しました:

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%"したがって、最初の結果は得られず、2 番目の結果は最初の結果が得られます。

遅延拡張を無効にした理由はありますか? この問題を解決する 1 つの方法は、遅延展開を有効にして ( に置き換え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 に答える