如何只将一个目录中过去一小时创建的文件和文件夹复制到新目录?

时间:2013-06-11 15:26:22

标签: batch-file copy-paste robocopy delete-file

抱歉,我的编程经验非常少,但我会尽力使其有意义。

基本上,我想创建一个程序(可能是批处理文件?),它每小时运行一次,删除目标目录中的所有内容,然后将源目录中过去一小时创建的所有文件或文件夹复制到目标目录。源目录中的文件和文件夹不受影响。删除和复制功能可以是两个单独的程序,如果这使事情更容易。他们只需按顺序运行。

我已经研究了很多不同的解决方案,比如Robocopy和xcopy,但是我还没有弄清楚如何在目标目录中没有任何内容的情况下在Robocopy中使用/ xo命令,并且xcopy只是似乎无法接受这种程度的特异性。

3 个答案:

答案 0 :(得分:1)

@echo off
setlocal EnableDelayedExpansion

set target=C:\The\Target Directory
set source=C:\The\Source Directory

rem Deletes everything in the target directory
echo Y | del "%target%" > NUL

rem Copies any files or folders created in the past hour in the source directory
for /F "tokens=1,2 delims=:" %%a in ("%time%") do set /A "oneHourAgo=(1%%a-101)*60+1%%b-100"

for %%a in ("%source%\*.*") do (
   for /F "tokens=2-4 delims=: " %%b in ("%%~Ta") do (
      set /A "fileTime=(1%%b-100)*60+1%%c-100"
      if "%%d" equ "p.m." (
         if %%b neq 12 (
            set /A fileTime+=12*60
         ) else (
            set /A fileTime-=12*60
         )
      )
   )
   if !fileTime! gtr !oneHourAgo! copy "%%a" "%target%"
)

当“最后一小时”超过午夜时,此批处理文件无效。如果需要,可以添加这一点。

答案 1 :(得分:0)

Robocopy没有粒度,但XXcopy似乎处理它。

 /DA#30m selects files made within the last 30 minutes.

XXcopy可免费用于非商业用途,可从http://www.xxcopy.com

下载

XXcopy是对类固醇的xcopy。

答案 2 :(得分:0)

如果文件名是可预测的(你没说),我会为Windows批处理编写一个简单的logrotate脚本,就像这个一样,并使用windows task scheduler每小时运行一次。可以调整此脚本以进行3,10,24或更多次旋转。

@echo off
setlocal
CD logdir
del the.log.3
ren the.log.2 the.log.3
ren the.log.1 the.log.2
ren the.log.0 the.log.1
ren the.log the.log.0
相关问题