批处理脚本从文件夹复制最新文件

时间:2014-02-03 13:03:54

标签: windows batch-file cmd

我想将文件夹(和子文件夹)中的最新文件复制到新位置。 以下代码运行良好,但我不想按日期和时间(/ O:D)进行过滤,而只是按日期过滤,以便将同一日期的所有文件作为最新文件复制到新位置。

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

3 个答案:

答案 0 :(得分:1)

您可以使用xcopy /D来完成您想要的任务:

 /D:mm-dd-yyyy
                Copy files changed on or after the specified date.
                If no date is given, copy only files whose
                source date/time is newer than the destination time.

答案 1 :(得分:0)

@echo off
for /f "delims=" %%a in ('wmic OS Get localdatetime  ^| find "."') do set "dt=%%a"
set "YYYY=%dt:~0,4%"
set "MM=%dt:~4,2%"
set "DD=%dt:~6,2%"

set datestamp=%MM%-%DD%-%YYYY%

XCOPY D:\Backups\DB\*.bak D:\Latest\ /S /D:%datestamp%

问题:

此代码执行我想要的操作,但它也会复制文件的父子文件夹。由于D:\ Backups \ DB \文件夹中的每个.bak文件都位于D:\ Backups \ DB的子目录中。例如:

D:\ Backups \ DB \ 2013-12-01 \ 20131201.bak正在复制为

D:\Latest\2013-12-01\20131201.bak

而不是

D:\Latest\20131201.bak

如何阻止将.bak文件的父子文件夹复制到新位置?

答案 2 :(得分:0)

@echo off
set source="E:\backups\daily\database1"
set target="E:\backups\daily\newdb.bak"

FOR /F "delims=" %%I IN ('DIR %source%\*.bak /A:-D /O:-D /B') DO COPY %source%\"%%I" %target% & echo %%I & GOTO :END
:END
REM this copy a newest file at E:\backups\daily\database1 folder 
REM to other folder E:\backups\daily\ and the file name changed to newdb.bak