0

抱歉,我的编程经验很少,但我会尽力使这有意义。

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

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

4

3 回答 3

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%"
)

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

于 2013-06-11T19:54:56.667 回答
0

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

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

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

XXcopy 是类固醇的 xcopy。

于 2013-06-11T16:23:59.397 回答
0

如果文件名是可预测的(你没有说),我会为 Windows 批处理编写一个简单的 logrotate 脚本,就像这个一样,并使用 Windows 任务调度程序每小时运行一次。可以调整此脚本以进行 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
于 2013-06-11T20:16:57.837 回答