【问题标题】:Copy a file only if last modify is less than 10 minutes仅当上次修改时间少于 10 分钟时才复制文件
【发布时间】:2015-11-25 16:21:26
【问题描述】:

我目前有这个批处理文件,如果 firefox 打开,它会每 10 分钟自动备份一个文件。但我希望 .bat 仅在我的文件 (zotero.sqlite) 的最后修改时间小于 10 分钟时才实际复制:

详情

上午 11:00 我运行 bat,使用当前代码自动创建备份。 我离开办公桌 30 分钟(因此在此期间没有对 zotero.sqlite 进行任何修改)。同时,.bat 超时将创建 3 个 zotero.sqlite 副本(在 11:10、11:20 和 11:30)。但我不想要这些副本,因为它们都是相同的(它们都将具有相同的最后修改日期/时间)。 相反,我希望 .bat 是“智能的”,并注意文件是相同的(因为最后修改日期对所有人都是相同的),并且只有在最后修改日期不同时才复制文件。

因为我的简单 .bat 没有记录它上次复制的时间,所以确定 zotero.sqlite 是否被修改的最简单方法是检查上次修改日期并查看它是否超过 10分钟前:

●如果是,则bat不应复制zotero.sqlite并重新启动10分钟超时

● 如果最后修改的日期/时间小于 10 分钟前,bat 应该复制然后开始 10 分钟超时

这将阻止我积累数百个相同的备份。

@echo off
set programName=firefox.exe
start %programName%
:loop
tasklist /FI "IMAGENAME eq %programName%" 2>NUL | find /I /N "%programName%">NUL
if "%ERRORLEVEL%"=="0" copy "C:\Users\Me\Zotero\zotero.sqlite" "C:\Users\Me\Zotero\\Zotero_Backup_sqlite\Working_on_zotero_%date%---%time:~0,2%_%time:~3,2%_%time:~6,2%.sqlite"
if "%ERRORLEVEL%"=="1" exit /b
timeout /t 600 /nobreak
goto loop

我尝试了 /d 命令,但它给了我一个语法错误。

【问题讨论】:

  • 不太听从你的解释。您有 10 分钟的 TIMEOUT。因此,您每 10 分钟只会获得一次备份。不知道您所说的低于到 10 分钟是什么意思。如果您希望它每 10 分钟备份一次,则仅在设置了存档属性时才备份。每次文件更改时都会设置存档属性。因此,这将要求您改用 XCOPY 命令。因此,如果文件没有更改,则 10 分钟后将不会设置存档属性,并且 XCOPY 不会复制文件。
  • 谢谢@Squashman。我添加了“详细信息”部分。我想你明白我的意思:如果我理解你,我应该简单地将我的颂歌中的copy 更改为xcopy
  • 如果您阅读了XCOPY 命令的帮助,也会注意到/M 选项。

标签: batch-file windows-7 copy


【解决方案1】:

编辑:

这现在适用于常规副本,因此不再提示,使用存档属性检查文件是否已被编辑,然后在复制后删除该属性

@echo off
set programName=firefox.exe
start %programName%
:loop
tasklist /FI "IMAGENAME eq %programName%" 2>NUL | find /I /N "%programName%">NUL
if "%errorlevel%"=="0" goto copy
if "%errorlevel%"=="1" exit /b
:delayloop
timeout /t 600 /nobreak
goto loop

:copy
set "LogFile=C:\Users\Me\Zotero\zotero.sqlite"
attrib "%LogFile%" | findstr /B /L A 1>nul
if "%errorlevel%"=="1" goto delayloop
copy "%LogFile%" "C:\Users\Me\Zotero\Zotero_Backup_sqlite\Working_on_zotero_%date%---%time:~0,2%_%time:~3,2%_%time:~6,2%.sqlite"
echo File "%LogFile%" was modified since last check.
attrib -A "%LogFile%"
goto delayloop

【讨论】:

  • 谢谢丹尼斯!我试过你的建议,但是当我运行 .bat 和每次超时后我得到了这个:Does C:\Users\Me\Zotero\Zotero_Backup_sqlite\Working_on_zotero_2015-11-26--- 6_44_58.sqlite specify a file name or directory name on the target (F = file, D = directory)? 有没有办法自动选择 F,因为我希望备份在后台运行(没有我每 10 分钟打F)?也许这与我在备份期间重命名文件有关?
  • 将我的答案更新为不再提示
  • 超级!非常感谢丹尼斯!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-14
  • 1970-01-01
  • 2020-02-15
  • 2020-02-29
  • 1970-01-01
  • 2021-10-08
  • 1970-01-01
相关资源
最近更新 更多