我希望能够复制任何已更新的文件并每隔2分钟检查一次。
“已更新”:与上次编辑日期一样,或检查文件大小是否已被提升。
我在谷歌上搜索过,我发现了这个:
for %%X in ("file name") do set size=%%~zX&set filetime=%%~tX
但我不知道如果是的话我是否不能使用这行代码检查文件夹,那么请原谅我的时间......
如果不清楚,请发表评论,我会重写。
-Briant
答案 0 :(得分:0)
好吧,我想到了两种方法:
第一种方法是使用timeout
命令每两分钟检查文件大小是否与上次检查不同。
第二种方法是安排批处理脚本每两分钟运行一次并检查之前保存的注册表项。
如果你不关心脚本是否一直在运行,那么第一种方法是最好的,所以我们走了:
@echo off
setlocal enabledelayedexpansion
:start
call:check
if "%currentFileSize%" NEQ "" (
if !currentFileSize! NEQ !lastFileSize! (
echo/Here you can do whatever you want
pause
) else (
echo/Size not changed
)
)
set lastFileSize=%currentFileSize%
timeout 120
goto start
:check
for /f %%a in ("File.txt") do (set CurrentFileSize=%%~za)
答案 1 :(得分:0)
@ECHO OFF
SETLOCAL
SET "targetdir=U:\destdir"
SET "flagfilename=%temp%\changedfiles.flag"
PUSHD %targetdir%
(
FOR /f "tokens=1*delims=" %%a IN (
'dir /b /a-d /o:n "*" 2^>nul'
) DO (ECHO(%%~za-%%~ta*%%~fa)
)>"%flagfilename%"
:loop
timeout /t 10 >nul
IF NOT EXIST "%flagfilename%" popd&GOTO :EOF
(
FOR /f "tokens=1*delims=" %%a IN (
'dir /b /a-d /o:n "*" 2^>nul'
) DO (ECHO(%%~za-%%~ta*%%~fa)
)>"%flagfilename%.2"
FOR /f "tokens=1,2delims=*" %%a IN ('type "%flagfilename%.2" ') DO (
FINDSTR /L /c:"*%%b" "%flagfilename%" > nul
IF ERRORLEVEL 1 (ECHO new file:%%~nxb) ELSE (
FINDSTR /x /L /c:"%%a*%%b" "%flagfilename%" > nul
IF ERRORLEVEL 1 (ECHO chg file:%%~nxb)
)
)
FOR /f "tokens=1,2delims=*" %%a IN ('type "%flagfilename%" ') DO (
FINDSTR /L /c:"*%%b" "%flagfilename%.2" > nul
IF ERRORLEVEL 1 (ECHO del file:%%~nxb)
)
MOVE /y "%flagfilename%.2" "%flagfilename%" >NUL 2>NUL
GOTO loop
GOTO :EOF
您需要将targetdir
设置为感兴趣的目录;根据您的选择设置标志文件名。
在标志文件中构建文件列表,然后构建并比较伴随列表。分析和报告差异。
您可以通过删除标记文件来干净地关闭该过程。
我将超时设置为10秒进行测试。不用说,你需要在2分钟的循环时间内将超时更改为120.
答案 2 :(得分:0)
如果您使用的是Vista或更高版本的操作系统(或者如果您使用的是XP并且允许使用Microsoft提供的免费下载的2003 Resource Kit工具),则robocopy是更好的选择
robocopy c:\source\folder c:\target\folder /e /mot:2
这将递归地将所有文件和文件夹从源复制到目标,并且每两分钟,如果有任何更改,它将反映在目标中。