2017-11-08 6 views
0
私は複数のフォルダのディレクトリを検索し、最新のファイル(.exeファイル)をチェックする必要があり、別の場所にそのコピー

が含まれている最新のフォルダを検索。特定のファイル

SET "src_root" 
SET "tgt_path" 
DIR "%src_root%" /B /AD /O-D /TC > "%TEMP%\dirlist.tmp" 
< "%TEMP%\dirlist.tmp" SET /P last_dir= 
XCOPY "%src_root%\%last_dir%\*.exe" "%tgt_path%"** 

このコードは、私は、最新のフォルダにEXEファイルをコピーすることができますが、場合には、最新のフォルダにはEXEが存在しない、私は誰が助けることができる、最新のEXEを含むフォルダからコピーする必要があります私は出る?

+0

おお、私は疲れている必要があります。私の悪い –

答えて

0
@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メソッドを使用して新しく見つかったファイルと前に見つかったファイルを比較し、新しいものが後であれば新しい候補を選択します。一致するすべての名前がテストされるまで続行します。

+0

これは完全に動作します!私のディレクトリが大きすぎるので、バッチは最新のフォルダを見つけるのに時間がかかり過ぎて、これに対処する方法はありませんか? –

関連する問題