質問: 最新のファイルを新しいフォルダにコピーするためのwindowsバッチファイル フォルダとそのサブフォルダから新しい場所に最新のファイルをコピーしたい。次のコードは適切に機能しますが、日付と時刻(/ o:d)でフィルタリングするのではなく、dateのみでフィルタリングするため、同じ日付のすべての最新ファイルが最新ファイルとして新しい場所にコピーされます。for /f "delims=|" %%i in ('dir "d:\backups\db\*.bak" /b /o:d /s') do set newestfile=%%i copy "%newestfile%" "d:\backups\db\latest"
回答: 解決次のバッチスクリプトは、forfilesコマンドを使用します。これは、windowsxpではデフォルトでは使用できません。それが使用しているオペレーティングシステムである場合は、 手動でダウンロード する必要があります。構文は似ていますが、 同一ではありません 。@echo off rem set the working directory pushd "d:\backups\db" rem get the latest modified .bak file for /f "delims=" %%g in ('dir *.bak /b /o:-d /s 2^>nul') do ( rem copy the newest files call :copynewest %%g "latest" rem restore the previous working directory popd goto:eof ) :copynewest setlocal rem make sure there's something to copy if "%~1" == "" exit /b rem check output folder if "%~2" == "" exit /b rem get the file path set filepath=%~dp1 rem strip the trailing backslash char set filepath=%filepath:~0,-1% rem copy latest files which share the same date for /f "delims=" %%g in ('"forfiles /p "%filepath%" /m "%~nx1" /c "cmd /c echo @fdate""') do ( forfiles /p "%cd%" /m *.bak /s /c "cmd /c echo @relpath | findstr /i /c:"\%~2" >nul || copy @path "%cd%\%~2" >nul" /d %%g ) endlocal & exit /b