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

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

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

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

评分人数

to #16

1.我不“就事论事”,我难道想跟你扯犊子?

2.你跟楼主说话和我没有关系,你扯上我做神马?我认识你?“他的代码效率极低”,你扯效率做神马?楼主都能用,你测试过不能用?假设我也回复楼主:“那2B在胡说八道”,你不许生气。

3.资源占用高我当然承认,假设一开始你就拿这个说事,那我还真对你刮目相看。

4.楼主什么时候提过慢半拍的事情了?写代码尽可能考虑周全没有错,但也得具体问题具体分析吧?神马都想要考虑到,那我劝你别学批处理了。

5.你没有用“ping等外部命令”,因为你认为 fc 是内部命令,因为你认为用了外部命令效率就一定低。

6.真正的高手不仅水平了得,而且谦虚谨慎、与世无争。本人只是一批处理菜鸟,从不认为自己比谁水平高。至于你,把你归到“高手”之列,你嫌不嫌臊得慌?

TOP

罔谈彼短,靡侍己长,不同角度有不一样的风景
以我的经验,目测两种方案各有占资源的部分,前者是因为调用wmic,后者是因为对延时的实现
而且楼主都结帖了,再为哪个方案好而吵架这不是太搞笑了吗?

TOP

回复 15# WHY


    就事论事,我发现你很喜欢纠结,我是跟楼主说话也没有回复你,占资源的话你的程序会更夸张吧?你自己看看进程每次启动findstr和wmi ping cpu会暴涨最少20-30%左右
而且你在返回值上每次得到结果都会慢半拍,楼主也说了.举个典型的例子就是,当你要解决一个问题的时候要求不能过午夜12点,因为速度慢半拍而发生问题.
你再看看我的代码里有ping 等外部程序么? 你说我自以为是你还是管好自己吧,我的都没搭理你,上来一句喷人,到底是谁自以为是我就呵呵了

TOP

to 楼上

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

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

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

TOP

to 楼上

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



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

TOP

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

TOP

to 楼上

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

TOP

回复 9# junili


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

TOP

回复 7# WHY


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

TOP

回复 8# Nsqs


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

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

  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

回复 5# WHY


    这个也是VBS脚本吧!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

返回列表