[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] [已解决]批处理如何实现循环监控指定文件是否发生改变并将改变后的文件备份到指定目录

本帖最后由 pcl_test 于 2016-4-29 01:05 编辑

如题,altrun的配置文件最近老是丢失,如果做成定期备份的话即占用大量空间又造成大量的无用文件。
我的设想是这样的:循环检测这个配置文件的大小(或者是日期、MD5、SHA-1等),与上次的结果(最后一次的变化量)进行比较,如相同,跳到程序循环检测入口继续检测;如不同,自动执行“文件名+日期”复制到指定目录进行备份。
1

评分人数

本帖最后由 Nsqs 于 2016-4-28 02:41 编辑
  1. dim s(1):set fso=CreateObject("scripting.filesystemobject")
  2. file="1.txt" '处理文件路径
  3. path="d:\abc\" '复制路径
  4. if right(path,1)<>"\" then _
  5. path=path&"\"
  6. s(0)=fso.opentextfile(file).readall
  7. do:if not fso.folderexists(path) then _
  8. fso.createfolder path
  9. read=fso.opentextfile(file).readall
  10. if StrComp(read,s(0)) then _
  11. fso.copyfile file,path&file&"_"&dv&"."&fso.getextensionname(file):_
  12. s(1)=read:s(0)=read '数据发生改变
  13. wsh.sleep 1E+3:loop
  14. function dv '格式化时间
  15. dim y,m,d
  16. y=year(date):m=month(date):d=day(date)
  17. dv=y _
  18. &(100+m) \10 mod 10 & (100+m) mod 10 _
  19. &(100+d) \10 mod 10 & (100+d) mod 10
  20. end function
复制代码
每秒检测,退出用任务管理器结束,保存vbs文件

TOP

有种技术叫版本控制,VCS,GIT。。。
部分网盘带版本管理功能,比如Dropbox

以及一些一自动备份软件支持增量备份。
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

回复 2# Nsqs


    感谢大神指教,可以用bat批处理实现吗?
这么晚还在熬夜,辛苦了!

TOP

用 wmi 事件监控
  1. strSrcFile = "E:\test\a.txt"
  2. strDstDir = "E:\Backup"
  3. Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
  4. Set colEvents = objWMI.ExecNotificationQuery _
  5.     ("select * from __InstanceModificationEvent within 5 where " _
  6.     & "TargetInstance ISA 'CIM_DataFile' and TargetInstance.Name='" & Replace(strSrcFile, "\", "\\") & "'")
  7. While True
  8.     Set objEvent = colEvents.NextEvent
  9.     strNewFile = strDstDir & "\" & objEvent.TargetInstance.LastModified & ".txt"
  10.     objEvent.TargetInstance.Copy strNewFile
  11. Wend
复制代码

TOP

回复 5# WHY


    这个也是VBS脚本吧!bat不能实现吗?

TOP

  1. @echo off
  2. set "f=E:\Test\a.txt"
  3. for /f %%i in ('wmic datafile where "Name='%f:\=\\%'" get LastModified^|findstr [0-9]') do set "t1=%%i"
  4. :Loop
  5. >nul ping 127.0.1 -n 5
  6. for /f %%i in ('wmic datafile where "Name='%f:\=\\%'" get LastModified^|findstr [0-9]') do set "t2=%%i"
  7. if not "%t1%" == "%t2%" copy "%f%" "E:\Backup\%t2%.txt"
  8. set "t1=%t2%"
  9. goto :Loop
复制代码
1

评分人数

    • junili: 乐于助人,感谢大神!~技术 + 1

TOP

本帖最后由 Nsqs 于 2016-4-28 17:18 编辑
  1. @echo off
  2. set "file=1.txt"
  3. copy %file% tmp>nul
  4. set "p=d:\abc"
  5. if not %p:~-1%==\ set p=%p%\
  6. :loop
  7. set t=%time:~,2%%time:~3,2%%time:~6,2%&call set f=%%file:.=_%t%.%%
  8. cls&fc /b %file% tmp>nul 2>nul && echo 数据没有任何改动||(
  9. (copy %file% tmp
  10. if not exist %p% md %p%
  11. copy %file% %p%%f%)>nul
  12. echo 数据发生改变)
  13. for /l %%1 in (1 1 12000)do (. 2>nul)
  14. goto loop
复制代码
回复 6# junili

每1秒检测一次

TOP

回复 8# Nsqs


    大神,您的脚本太高深了,我这种小白根本无法读懂,还是采用7楼(WHY)的答案吧,简单些,方便我后期修改使用。不好意思哦!

TOP

回复 7# WHY


    感谢在百忙之中帮助我等小白,解惑。真的十分感谢!

TOP

回复 9# junili


    他的代码效率极低,调用太多外部程序了

TOP

to 楼上

好好贴你的代码就可以了,以你目前的批处理水平,评论别人的代码,你还不够格。

TOP

喷别人性能不好技能 +1
批处理性能这么差,用个屁批处理。
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

to 楼上

好好贴你的代码就可以了,以你目前的批处理水平,评论别人的代码,你还不够格。
WHY 发表于 2016-4-29 11:07



    逗,你的代码在for里调用wmi和find 除了bat本身循环,还不包括第三方多次循环。或者,你这么优越感那就秀一秀你的技术?我是跟别人说话。再者你那么高调的说我技术烂的话。说话之前最好掂量一下自己,小心打脸。

TOP

to 楼上

卧槽,自以为是的是你,说话高调的是你,被你反咬一口。。。

楼主所要求的是一个无限循环的功能,也就是不考虑开始时间和结束时间的死循环。
这种情况下你还考虑神马效率高不高?
你的代码效率高,1秒钟能复制一个文件;我的代码效率低,1秒钟复制不了一个文件?

这种情况下更应该关注的是资源占用率和代码兼容性。
假设你说的是代码兼容性如何如何,我不会有异议,或许还可能给你点个赞

TOP

返回列表