【发布时间】: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