再帰 dir コマンドで最新のファイルを取得するコマンドライン

再帰 dir コマンドで最新のファイルを取得するコマンドライン

私のハードディスクには、特定のテキスト ファイル (Tracker.txt) が含まれる可能性のあるサブフォルダーが毎日何百も作成されます。

完全なパスを持つ最新の tracker.txt ファイルという 1 つの結果のみを取得するコマンドラインまたは BAT ファイルを作成したいと思います。

試してみましたdir /s tracker.txt /ODが、結果は日付でフィルタリングされません。

ありがとう!

答え1

DIR /B /S /OD "tracker.txt"コマンドの結果を一時ログ ファイルにパイプすることができますが、FORループ置換を使用して、名前に一致する各ファイルの日付タイムスタンプ、その後にコンマ、完全な明示的なパスとファイル名 (つまり ) を配置しますYYYY-MM-DD hh:mm [AM/PM]

次に、SORTそのファイルに対してコマンドを使用して、そのファイル内のすべての行を新しいソート済みファイルにソートしますが、最新のタイムスタンプ ファイルがリストの一番下に配置されます。

FOR最後に、カンマを区切り文字として使用して最終ファイル リストの最終ループを実行し、そのループ内の反復変数を各完全明示パスにのみ設定します。リストの一番下に到達すると、これが最後の最新ファイルになりSETます。その後、再帰的に指定したすべてのディレクトリ内から、日付スタンプに関して最新のファイルである最後に設定された変数を使用して、何かを行うことができます。


バッチ スクリプトの例

変数の値は、SET StartDir=ファイルを再帰的に検索するための DIR コマンドが開始されるルート フォルダーに設定してください。

@ECHO ON

SET StartDir=C:\Users\User\Desktop\Test

IF EXIST "%temp%\~dir1temp.dat" DEL /Q /F "%temp%\~dir1temp.dat"
FOR /F "TOKENS=*" %%A IN ('Dir /B /S /OD "%StartDir%\tracker.txt"') DO ECHO %%~TA, %%~FPNXA>>"%temp%\~dir1temp.dat"

IF EXIST "%temp%\~dirsorttemp.dat" DEL /Q /F "%temp%\~dirsorttemp.dat"
SORT "%temp%\~dir1temp.dat">>"%temp%\~dirsorttemp.dat"

FOR /F "TOKENS=2 DELIMS=," %%A IN (%temp%\~dirsorttemp.dat) DO (SET File=%%~A)

ECHO %File%
:::<command to do something with %file%>
PAUSE

その他のリソース

  • 選別
  • /Fの場合
  • FOR /?(バッチ置換)

    In addition, substitution of FOR variable references has been enhanced.
    You can now use the following optional syntax:
    
    %~fI        - expands %I to a fully qualified path name
    %~tI        - expands %I to date/time of file
    
  • セット

関連情報