2011-07-18 34 views
1

作成した2つのファイルの日付の比較に基づいてWindowsバッチスクリプトをフォークしたいと思います。私は道がなければならないように感じる。何か案は?Windowsバッチスクリプト:2つのファイルの作成日を比較します

更新日: 解決策をPAの回答で試してみました。現在のスクリプトの最後にコードスニペットをそのままコピーしました。その後、私はスクリプトで、これは初期の追加: 無効な別名動詞:私が実行エラーになります

IF EXIST "%PROGRAMFILES(X86)%" CALL :getCreationDate "%PROGRAMFILES(X86)%\oracle\jinitiator 1.3.1.28\lib\security\certdb.txt" 

を。

+0

作成日または変更日が必要ですか? –

+0

実際にはうまくいくでしょう。 – raddevon

答えて

1

バットではWMIC DATAFILEコマンドでファイルの作成日を取得できます。これはGET CREATIONDATE動詞を使用します。

コマンドの出力を変数に取り込む必要があります(HELP FORおよびHELP SETを参照)。

:labelおよびGOTO :eofを使用すると、この機能を組み込む関数を作成できます。

WMIC DATAFILEの場合、WHERE NAME=句には完全に指定されたファイル名が必要です。 HELP CALL%~f修飾子を参照してください。

WMIC DATAFILE WHERE NAME=には、ファイル名のバックスラッシュを倍にする必要があります。単一のバックスラッシュをダブルバックスラッシュに置き換える場合は、HELP SET% : = %の構文を参照してください。このような

何か.....

:getCreationDate 
set FILE=%~f1 
set FILE=%FILE:\=\\% 
FOR /F "skip=1 tokens=* usebackq" %%A IN (`wmic datafile where name="%FILE%" get creationdate`) DO (
    SET CREATIONDATE=%%A 
) 
goto :eof 

あなたはそれを呼び出すためのCALL :labelを使用する必要があります。

CALL :getCreationDate myfile.txt 

コンパイルに関心のある日時の部分を抽出する必要があります。 ~修飾子を使用してHELP SETを参照してください。

最後に、返される日付ファイルを比較する必要があります。 HELP IFを参照してください。

+0

ありがとうございました。これは完全なパスで動作しますか?私はログオンスクリプトを書いています。ローカルマシン上のファイルとネットワーク共有上のファイルの日付を比較したいと思います。どちらのファイルのパスでもこれを動作させることはできません。 – raddevon

+0

何を試しましたか?どの部分がうまくいったのですか?あなたが見つけた問題は何ですか?この情報であなたの質問を編集してください。 –

+0

完了。ありがとうございました。 – raddevon

0

はこれを試してください:「取得」の

wmic datafile where name='c:\\users\\ovadia\\test\\addx.txt'  get 'LAST MODIFIED' > dateofNEWadd.txt 

wmic datafile where name='c:\\users\\ovadia\\test\\prevaddx.txt' get 'LAST MODIFIED' > dateofOLDadd.txt 

fc /LB1 dateofNEWadd.txt dateofOLDadd.txt 

if errorlevel 1 echo "fc err not 0" 

del dateof* 

属性がかもしれ...

Access Rights, 
Caption, 
Class Name, 
Compressed, 
Compression Method, 
Computer System Class Name, 
Computer System Name, 
Creation Date, 
Current File Open Count, 
Description, 
Drive, 
Eight Dot Three File Name, 
Encrypted, 
Encryption Method, 
File Extension, 
File Name, 
File System Class Name, 
File System Name, 
File Type, 
Hidden, 
Install Date, 
Last Accessed, 
Last Modified, 
Manufacturer, 
Name, 
Path, 
Readable, 
Should Be Archived, 
Size, 
Status, 
System File, 
Version, 
Writeable 
3

あなたはイコールはそれを逃れるために署名する前にキャレットを配置する必要があり(cmd.exeのですすばらしい)。この作品を確認しました:

setlocal enableextensions enabledelayedexpansion 
call :getCreationDate "C:\Windows\Notepad.exe" 
echo Creation Date is: %creationdate% 
endlocal 
goto :EOF 
:getCreationDate 
set FILE=%~f1 
set FILE=%FILE:\=\\% 
for /F "skip=1 tokens=* usebackq" %%A in (`wmic datafile where name^="%FILE%" get creationdate`) do (
    set creationdate=%%A 
) 
goto :EOF 
関連する問題