批处理以检查是否修改了单个文件

时间:2010-07-30 15:40:37

标签: batch-file

如果今天修改/创建单个文件(example.avi),如果答案为是,则必须检入外部目录,然后启动另一个批处理或退出。

我发现了几个帖子,但我无法自己制作这个批处理文件。

我希望有人可以帮助我。 提前谢谢。

3 个答案:

答案 0 :(得分:1)

我发现了这个,但在我的Win XP上无效。

@echo off
for %%F in (C:\TEST\myfile.avi) do (for /F %%D in ("%%~tF") do (set mdate=%%D))
for /F "tokens=2" %%D in ('date/t') do set cdate=%%D

if "%cdate%"=="%mdate%" start myprogram.bat

答案 1 :(得分:1)

如果你在正确的位置开始换行,你找到的脚本对我来说似乎是有效的。 您可以在if语句之前添加echo语句,以查看cdate和mdate是否具有正确的值。 并检查目录中是否存在myprogram.bat。 这是一个修改版本,显示了这一点。你可以试试这个,如果不起作用就发布输出?

@echo off 
for %%F in (C:\TEST\myfile.avi) do (for /F %%D in ("%%~tF") do (set mdate=%%D)) 
for /F "tokens=2" %%D in ('date/t') do set cdate=%%D
echo cdate="%cdate%"  mdate="%mdate%" current dir=%cd%
if "%cdate%"=="%mdate%" going to start myprogram.bat
if "%cdate%"=="%mdate%" start myprogram.bat
pause

修改 这是一个独立于区域设置的版本。它基于this解决方案。

@echo off 
reg copy "HKCU\Control Panel\International" "HKCU\Control Panel\International-Temp" /f > NUL
reg add "HKCU\Control Panel\International" /v sShortDate /d "yyMMdd" /f > NUL
for %%F in (C:\TEST\myfile.avi) do (for /F %%D in ("%%~tF") do (set mdate=%%D)) 
for /F "tokens=1" %%D in ("%date%") do set cdate=%%D
echo cdate="%cdate%"  mdate="%mdate%" current dir=%cd% date="%date%"
reg copy "HKCU\Control Panel\International-Temp" "HKCU\Control Panel\International" /f > NUL
if "%cdate%"=="%mdate%" start myprogram.bat

它首先在注册表中备份短期格式。然后用yyMMdd替换它。现在它查找文件的修改日期和当前日期。在比较日期之前,它恢复了短期格式。

答案 2 :(得分:0)

DIR %1 | FIND /I "%1" > ~ISMODIF.TMP
ECHO.>> ~ISMODIF.TMP
TYPE ~ISMODIF.TMP | TIME | FIND /I "%1" > ~ISMODIF.BAT
ECHO SET CHKDATE=%%4> ENTER.BAT
CALL ~ISMODIF.BAT
DIR ~ISMODIF.BAT | FIND /I "~ISMODIF.BAT" > ~ISMODIF.TMP
ECHO.>> ~ISMODIF.TMP
TYPE ~ISMODIF.TMP | TIME | FIND /I "~ISMODIF.BAT" > ~ISMODIF.BAT
ECHO SET NOWDATE=%%4> ENTER.BAT
CALL ~ISMODIF.BAT
IF "%NOWDATE%"=="%CHKDATE%" ECHO %1 was created or modified today

来自http://www.robvanderwoude.com/bht.php