@ECHO OFF
SETLOCAL
SET "sourcedir=c:\sourcedir"
SET "filename="
FOR /f "delims=" %%a IN (
'dir /s /b /a-d "%sourcedir%\neo.7z" '
) DO SET "filename=%%a"&set "dirname=%%~dpa"&goto found1
ECHO NOT found!
GOTO :eof
:found1
FOR /f "delims=" %%a IN (
'dir /s /b /a-d "%sourcedir%\neo.7z" '
) DO IF /i "%dirname%" neq "%%~dpa" FOR /f %%s IN ('XCOPY /y /L /D "%filename%" "%%~dpa"') DO IF "%%s"=="0" SET "filename=%%a"&set "dirname=%%~dpa"&goto found1
ECHO latest file is "%filename%"
GOTO :EOF
sourcedir
の設定を状況に合わせて変更する必要があります。
私はテストのためにneo.7z
という名前のファイルを使用しました。私はあなたが記述した状況で固定ファイル名を持つべきだと考えています。* .exeファイルで疑いもないでしょう。
それは非常に歩行者ですが、仕事を行います。
基本的に、必要なディレクトリツリーに必要な名前のファイルがあれば、filename
というディレクトリに、dirname
に名前を記録します。ベースとしてそのファイル名を使用して
、他のすべての一致するファイル名の上にそれをINGのxcopy
を試してみてください。一覧表示のみには/L
フラグを使用し、ユーザー介入を削除するには/y
フラグを使用します。戻り値が1 file(s) copied
、fの場合、最初のトークンのみが%%s
に選択され、選択されたファイルは後になります。 0 file(s) copied
セット0
から%%s
と選択したファイルが早いので、新しいファイルとdirectorynamesと再起動を選択することを意味します。
私はそれをスピードアップするために、ユーザーの運動、それを残しておきます。 (提案興味を持っている場合:delayedexpansion、サブルーチンと保持新しい-始点)を
改訂[約5倍の速さ]
@ECHO OFF
SETLOCAL
SET "sourcedir=c:\sourcedir"
SET "filename="
FOR /f "delims=" %%a IN (
'dir /s /b /a-d "%sourcedir%\neo.7z" '
) DO SET "candidate=%%a"&CALL :latest
ECHO latest file is "%filename%"
GOTO :eof
:latest
IF NOT DEFINED filename GOTO selectnew
FOR /f %%s IN ('XCOPY /y /L /D "%filename%" "%candidate%"') DO IF "%%s"=="1" goto :eof
:selectnew
SET "filename=%candidate%"
GOTO :EOF
この改訂版は、繰り返しのディレクトリスキャンを回避することができます。一致する各ファイル名に対して、xcopy /L
メソッドを使用して新しく見つかったファイルと前に見つかったファイルを比較し、新しいものが後であれば新しい候補を選択します。一致するすべての名前がテストされるまで続行します。
おお、私は疲れている必要があります。私の悪い –