2012-01-19 8 views
2

スクリプトが最後に実行されてからWindowsシステム上のファイルが変更されているかどうかを調べる必要があります。 Unixではこれを行うことができます:バッチファイルで時刻に基づいてファイルを検索する

if [ "$file" -nt "$touch" ] 
then 
     echo "$file has been changed!" 
     touch "$touch" 
fi 

私はWindowsバッチスクリプトで同じことをする必要があります。いいえ、Perl、Python、Ruby、Cygwin、PowerShellは使用できません。この特定のサーバーでは利用できません。実際、私はこのサーバーにアクセスできません。私は、バッチスクリプトを作成し、他の人にそれをインストールさせ、それが動作することを期待しています。

はい、仕事は毎日楽しい人と楽しい人になります。

答えて

2

これは、バッチスクリプトとテストファイルが同じディレクトリにあり、バッチスクリプトが読み取り専用でない限り機能します。空白を区切り文字として複数のファイル名をfile変数に追加することによって、多くのファイルのいずれかが更新された場合には、これを実行するように調整できます。

@echo off 
setlocal 
set file="test.txt" 

pushd %~dp0 
for /f %%F in ('dir /b /o-d "%~nx0" %file%') do (
    if "%%~F" neq "%~nx0" (
    echo %file% has changed 
    rem Below is weird syntax for updating timestamp of this batch script 
    copy "%~nx0"+,, >nul 
) 
    goto :continue 
) 
:continue 
popd 
+0

EDIT - 現在のディレクトリがバッチディレクトリと一致しないと、元のコードが失敗しました。変更されたコードは関係なく動作するはずです。 – dbenham

+0

最終的な書き込み日時を比較するには、 'dir'で/ tスイッチを使うように変更することができます。 – Mechaflash

+0

@Mechaflash - 私の理解は、最後に書かれた時間がデフォルトであり、私のテストはそれを裏付けるようです。 '/ TW'を追加することは傷つけることはできませんが、私はそれが何か変わるとは思いません。 – dbenham

関連する問題