Board logo

标题: [文件操作] 批处理如何对比2个目录,如果相同退出,如果不同则启动下一个程序? [打印本页]

作者: jackhkyin    时间: 2014-11-21 17:18     标题: 批处理如何对比2个目录,如果相同退出,如果不同则启动下一个程序?

对比2个目录,如果目录下的子目录相同则退出批处理,如果不同则启动下一个程序。
比如有网络目录\\abc\a     本地目录 d:\a    2个目录a 下面若具备相同子目录则退出批处理,若不同则执行下一个程序并退出批处理

作者: CrLf    时间: 2014-11-21 21:02

如果要求的是完全一致的话...
如果有 robocopy 可以这样:
  1. @echo off
  2. robocopy /l /mir a b|findstr /rc:"目录: *[0-9]* *0" >nul&&exit /b
  3. 下一个程序.exe
复制代码
不然可以这样:
  1. @echo off
  2. dir /s a\|findstr /vbrc:" ">a.txt
  3. dir /s b\|findstr /vbrc:" ">b.txt
  4. fc a.txt b.txt >nul&&exit /b
  5. 下一个程序.exe
复制代码

作者: jackhkyin    时间: 2014-11-22 16:50

     谢谢CrLf提供技术支持,不来这里我还不知道windows下还有robocopy这个高级复制工具,原来一直都用Fastcopy 。
    上面2段代码中,第一段代码是要求2个目录完全一样是吗。连时间戳也一样吗。
    而第二段则没有那么高的要求,只需比较2个TXT下面记录的目录子文件夹一致即可。
不知道我理解的是否正确

作者: jackhkyin    时间: 2014-11-22 17:10

[attach]7892[/attach]
刚运行的时候提示 找不到文件  不知道哪里不对。
我在E F 2个盘符下面创建了2个test文件夹。对比这2个文件夹。
作者: CrLf    时间: 2014-11-22 17:22

回复 4# jackhkyin


你改错地方了,a\ 替换成 e:\test,b\ 替换成 f:\test
作者: jackhkyin    时间: 2014-11-22 18:46

找不到指定文件  的问题 解决了,但判断语句是否有误。我复制了2个同样的子目录到目标文件夹下面,2个目录下的子目录数目和名字完全一样也执行后面的程序。
作者: jackhkyin    时间: 2014-11-22 20:48

我将 dir 命令后面的参数改了,现在是 dir /w /o  这样写到TXT文本中的内容只显示文件夹并排序。就不会因为没有排序导致 因顺序不同而造成TXT文件不一样,从而程序误判。在我的win7 x64 和 win server r2 测试通过。
最终代码:
dir /w /o e:\test|findstr/vbrc:" ">a.txt
dir /w /o f:\test|findstr/vbrc:" ">b.txt
fc a.txt b.txt >nul&&exit /b
下一个程序.exe
作者: CrLf    时间: 2014-11-22 23:23

回复 7# jackhkyin


    我觉得是修改时间不一样导致判断“出错”,/w 确实是个好办法




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2