找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 28865|回复: 8

[系统相关] 批处理如何实现监控目录及其子目录的文件创建、删除和修改?

[复制链接]
发表于 2012-3-23 19:09:27 | 显示全部楼层 |阅读模式
1.实时监控目录中文件(包括子目录)
1.1文件是否增多?多了哪些文件以及具体路径是什么?(好像通过powershell调用system.io.filesystemwatcher能实现部分功能)
1.2如何判断该目录中新增的文件是否在另一目录中能找到?(这部分目前已有方法解决!)
关键是1.1没什么思路!望哪位batchman能给点提示,当然能提供源码更好!谢谢!
目录的初始文件列表lista.txt如下
  1. D:\hh\耶鲁大学开放课程:心理学导论.Open.Yale.course:Introduction.to.Psychology.01.Chi_Eng.640X360-YYeTs人人影视制作.V2.rmvb
  2. D:\hh\耶鲁大学开放课程:心理学导论.Open.Yale.course:Introduction.to.Psychology.02.Chi_Eng.640X360-YYeTs人人影视制作.V2.rmvb
  3. D:\hh\耶鲁大学开放课程:心理学导论.Open.Yale.course:Introduction.to.Psychology.03.Chi_Eng.640X360-YYeTs人人影视制作.V2.rmvb
  4. D:\hh\耶鲁大学开放课程:心理学导论.Open.Yale.course:Introduction.to.Psychology.04.Chi_Eng.640X360-YYeTs人人影视制作.rmvb
  5. D:\hh\耶鲁大学开放课程:心理学导论.Open.Yale.course:Introduction.to.Psychology.05.Chi_Eng.640X360-YYeTs人人影视制作.rmvb
  6. D:\hh\耶鲁大学开放课程:心理学导论.Open.Yale.course:Introduction.to.Psychology.06.Chi_Eng.640X360-YYeTs人人影视制作.rmvb
复制代码
运行以下批处理:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. dir /a-d/b/s . >listb.txt
  4. for /f %%i in (listb.txt) do (
  5. findstr /l "%%i" lista.txt
  6. if !errorlevel! equ 1 echo %%i >>listc.txt
  7. if !errorlevel! equ 1 echo %%i >>lista.txt
  8. )
复制代码
添加文件后目录文件列表为listb.txt如下
  1. D:\hh\耶鲁大学开放课程:心理学导论.Open.Yale.course:Introduction.to.Psychology.01.Chi_Eng.640X360-YYeTs人人影视制作.V2.rmvb
  2. D:\hh\耶鲁大学开放课程:心理学导论.Open.Yale.course:Introduction.to.Psychology.02.Chi_Eng.640X360-YYeTs人人影视制作.V2.rmvb
  3. D:\hh\耶鲁大学开放课程:心理学导论.Open.Yale.course:Introduction.to.Psychology.03.Chi_Eng.640X360-YYeTs人人影视制作.V2.rmvb
  4. D:\hh\耶鲁大学开放课程:心理学导论.Open.Yale.course:Introduction.to.Psychology.04.Chi_Eng.640X360-YYeTs人人影视制作.rmvb
  5. D:\hh\耶鲁大学开放课程:心理学导论.Open.Yale.course:Introduction.to.Psychology.05.Chi_Eng.640X360-YYeTs人人影视制作.rmvb
  6. D:\hh\耶鲁大学开放课程:心理学导论.Open.Yale.course:Introduction.to.Psychology.06.Chi_Eng.640X360-YYeTs人人影视制作.rmvb
  7. D:\hh\新建 文本文件.txt
复制代码
为什么结果listc.txt还是包含
  1. D:\hh\耶鲁大学开放课程:心理学导论.Open.Yale.course:Introduction.to.Psychology.01.Chi_Eng.640X360-YYeTs人人影视制作.V2.rmvb
  2. D:\hh\耶鲁大学开放课程:心理学导论.Open.Yale.course:Introduction.to.Psychology.02.Chi_Eng.640X360-YYeTs人人影视制作.V2.rmvb
  3. D:\hh\耶鲁大学开放课程:心理学导论.Open.Yale.course:Introduction.to.Psychology.03.Chi_Eng.640X360-YYeTs人人影视制作.V2.rmvb
  4. D:\hh\耶鲁大学开放课程:心理学导论.Open.Yale.course:Introduction.to.Psychology.04.Chi_Eng.640X360-YYeTs人人影视制作.rmvb
  5. D:\hh\耶鲁大学开放课程:心理学导论.Open.Yale.course:Introduction.to.Psychology.05.Chi_Eng.640X360-YYeTs人人影视制作.rmvb
  6. D:\hh\耶鲁大学开放课程:心理学导论.Open.Yale.course:Introduction.to.Psychology.06.Chi_Eng.640X360-YYeTs人人影视制作.rmvb
复制代码
期待listc.txt的结果应该是
  1. D:\hh\新建 文本文件.txt
复制代码
使用findstr的什么参数才能忽略那些空格斜杠等特殊字符???
发表于 2012-3-23 21:12:21 | 显示全部楼层
生成一份文件列表C:\list.txt,1分钟之后判断现在的文件列表跟C:\list.txt有啥差别。
发表于 2012-3-25 10:23:02 | 显示全部楼层
  1. findstr /l /v /x /g:a.txt b.txt
复制代码
 楼主| 发表于 2012-3-25 14:38:43 | 显示全部楼层
本帖最后由 xiaoqiang3243 于 2012-3-25 14:40 编辑
  1. findstr /l /v /g:a.txt b.txt
复制代码
能打印不匹配的行 但是如果包含中文 就达不到预期的效果了
发表于 2012-3-25 14:56:34 | 显示全部楼层
回复 4# xiaoqiang3243


我用的XP SP3英文版系统:

c:\Test>type a.txt
D:\hh\耶鲁大学开放课程:心理学导论.Open.Yale.course:Introduction.to.Psychology.01.Chi_Eng.640X360-YYeTs人人影视制作.V2.rmvb
D:\hh\耶鲁大学开放课程:心理学导论.Open.Yale.course:Introduction.to.Psychology.02.Chi_Eng.640X360-YYeTs人人影视制作.V2.rmvb
D:\hh\耶鲁大学开放课程:心理学导论.Open.Yale.course:Introduction.to.Psychology.03.Chi_Eng.640X360-YYeTs人人影视制作.V2.rmvb
D:\hh\耶鲁大学开放课程:心理学导论.Open.Yale.course:Introduction.to.Psychology.04.Chi_Eng.640X360-YYeTs人人影视制作.rmvb
D:\hh\耶鲁大学开放课程:心理学导论.Open.Yale.course:Introduction.to.Psychology.05.Chi_Eng.640X360-YYeTs人人影视制作.rmvb
D:\hh\耶鲁大学开放课程:心理学导论.Open.Yale.course:Introduction.to.Psychology.06.Chi_Eng.640X360-YYeTs人人影视制作.rmvb

c:\Test>type b.txt
D:\hh\耶鲁大学开放课程:心理学导论.Open.Yale.course:Introduction.to.Psychology.01.Chi_Eng.640X360-YYeTs人人影视制作.V2.rmvb
D:\hh\耶鲁大学开放课程:心理学导论.Open.Yale.course:Introduction.to.Psychology.02.Chi_Eng.640X360-YYeTs人人影视制作.V2.rmvb
D:\hh\耶鲁大学开放课程:心理学导论.Open.Yale.course:Introduction.to.Psychology.03.Chi_Eng.640X360-YYeTs人人影视制作.V2.rmvb
D:\hh\耶鲁大学开放课程:心理学导论.Open.Yale.course:Introduction.to.Psychology.04.Chi_Eng.640X360-YYeTs人人影视制作.rmvb
D:\hh\耶鲁大学开放课程:心理学导论.Open.Yale.course:Introduction.to.Psychology.05.Chi_Eng.640X360-YYeTs人人影视制作.rmvb
D:\hh\耶鲁大学开放课程:心理学导论.Open.Yale.course:Introduction.to.Psychology.06.Chi_Eng.640X360-YYeTs人人影视制作.rmvb
D:\hh\新建 文本文件.txt

c:\Test>findstr /l /v /x /g:a.txt b.txt
D:\hh\新建 文本文件.txt
 楼主| 发表于 2012-3-25 17:41:18 | 显示全部楼层
即便我是xp3中文版, 不解啊!
发表于 2012-3-25 18:31:01 | 显示全部楼层
回复 6# xiaoqiang3243


试试这个:
  1. grep -vxFf a.txt b.txt
复制代码
发表于 2012-3-25 21:16:14 | 显示全部楼层
为什么不用vbs呢?

  1. If InStr(1, WScript.FullName, "wscript.exe", 1) then
  2.     CreateObject("WScript.Shell").Run _
  3.         "cscript.exe """ & WScript.ScriptFullName & chr(34)
  4.     WScript.Quit()
  5. End If

  6. strComputer="."
  7. Set objWMIService = GetObject("winmgmts:" _
  8.     & "{ImpersonationLevel=impersonate}!\" _
  9.     & strComputer & "\root\cimv2")
  10. Set Sink = WScript.CreateObject("WbemScripting.SWbemSink", "Sink_")

  11. objWMIService.ExecNotificationQueryAsync Sink, _
  12.     "SELECT * FROM __InstanceOperationEvent WITHIN 1 WHERE " _
  13.     & "Targetinstance ISA 'CIM_DataFile' AND " _
  14.     & "TargetInstance.drive='d:' AND TargetInstance.path LIKE '\\hh\\%' "

  15. Do
  16.     WScript.sleep 1000
  17. Loop

  18. Sub Sink_OnObjectReady(objWbemObject, objAsyncContext)
  19.     WScript.Echo Now()
  20.     WScript.Echo Replace(Mid(objWbemObject.Path_.Class,11), "Event", "") _
  21.         & ": " & objWbemObject.Targetinstance.Name
  22.     WScript.Echo String(79,"=")
  23. End Sub
复制代码
光转载不能解决问题是没用的。
发表于 2012-3-25 21:46:42 | 显示全部楼层
回复 8# powerbat


你平均每个星期帮助别人解决几个问题?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 21:11 , Processed in 0.020692 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表