仅在最后修改少于10分钟时复制文件

时间:2015-11-25 16:21:26

标签: batch-file windows-7 copy

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

详情

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

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

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

●如果上次修改日期/时间少于10分钟,则应该复制并开始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命令,但它给了我一个语法错误。

1 个答案:

答案 0 :(得分:1)

编辑:

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

@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