最新のファイルを新しいフォルダーにコピーするWindowsバッチファイル


1

フォルダーとそのサブフォルダーから最新のファイルを新しい場所にコピーしたい。

次のコードは正常に機能しますが、日付と時刻(/ O:D)でフィルタリングするのではなく、日付のみでフィルタリングするため、同じ日付のすべての最新ファイルが最新のファイルとして新しい場所にコピーされます。

FOR /F "delims=|" %%I IN ('DIR "D:\Backups\DB\*.bak" /B /O:D /S') DO SET NewestFile=%%I
copy "%NewestFile%" "D:\Backups\DB\Latest"

回答:


2

溶液

次のバッチスクリプトはforfiles、Windows XPではデフォルトで使用できないコマンドを使用します。使用しているオペレーティングシステムの場合は、手動でダウンロードする必要があります。構文は似ていますが、同一ではありません

@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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.