Board logo

标题: [文件操作] [已解决]批处理怎样处理不同目录下的两个文件夹中的文件? [打印本页]

作者: friday011    时间: 2011-3-31 12:47     标题: [已解决]批处理怎样处理不同目录下的两个文件夹中的文件?

比较不同目录下的两个文件夹中的文件。比如D:\A文件夹中有文件a.xml,b.xml和c.property文件。C:\B文件夹中有a.xml,m.xml n.property文件
1.如果A文件夹中有的文件而B文件夹中没有,那么复制A中的这些文件到B中,如b.xml和c.property文件。
2.如果B文件夹中有的文件而A文件夹中没有,那么不做处理。如m.xml n.property文件
3.如果A文件夹中有的文件B文件夹中也有,如a.xml,那么首先比较两个a.xml文件的大小,
  1)如果A中a.xml文件大小比B中a.xml文件大的话,则拷贝A中的a.xml到B文件夹中,并备份B中原来的a.xml为a.xml.bak
   2)如果A中a.xml文件大小比B中a.xml文件小的话,则提示用户请手动处理a.xml,并继续处理其他的文件
  3)如果A中a.xml文件大小和B中a.xml文件大小一样的话,则不做任何处理

请各位高手尽量写的详细点,小弟是新手,没用过批处理。
万分感谢!
作者: friday011    时间: 2011-3-31 13:10

在线等待高手解答
作者: friday011    时间: 2011-3-31 13:30

高手都午休呢吧???
作者: weichenxiehou    时间: 2011-3-31 14:04

感觉楼主就是在做一下数据更新的事儿吧?你看这样成吗?如果a文件夹中的任何文件比b文件夹中的对应文件的修改时间晚,就复制该文件到b文件夹中的对应位置,包括b文件夹中没有的。
  1. echo a|xcopy d:\a c:\b /d
复制代码

作者: CrLf    时间: 2011-3-31 14:06

手动处理是什么意思
作者: friday011    时间: 2011-3-31 14:10

感觉楼主就是在做一下数据更新的事儿吧?你看这样成吗?如果a文件夹中的任何文件比b文件夹中的对应文件的修改时间晚,就复制该文件到b文件夹中的对应位置,包括b文件夹中没有的。
echo a|xcopy d:\a c:\b /d

weichenxiehou 发表于 2011-3-31 14:04


功能的确就是数据更新或者是数据同步,但是条件还是要的,
尤其是这个第三条。。。
3.如果A文件夹中有的文件B文件夹中也有,如a.xml,那么首先比较两个a.xml文件的大小,
  1)如果A中a.xml文件大小比B中a.xml文件大的话,则拷贝A中的a.xml到B文件夹中,并备份B中原来的a.xml为a.xml.bak
   2)如果A中a.xml文件大小比B中a.xml文件小的话,则提示用户请手动处理a.xml,并继续处理其他的文件
  3)如果A中a.xml文件大小和B中a.xml文件大小一样的话,则不做任何处理
作者: friday011    时间: 2011-3-31 14:11

手动处理是什么意思
zm900612 发表于 2011-3-31 14:06


手动处理就是  我们自己去比较两个文件的差异,不需要批处理做任何动作。
作者: friday011    时间: 2011-3-31 14:16

我自己照葫芦画瓢 写了一个 不过问题很多,给大家发下,大家帮我改改~~~
谢谢啦~~~~
  1. @echo off
  2. Xcopy /y /e /d "D:\test\*.*" "C:\test\"
  3. for /r C:\test\ %%i in (*) do set wind=%%~z1 (
  4. for /r D:\test\ %%a in (*) do set snow=%%~z1 (
  5. if "%%~ni"=="%%~na" (
  6. if %wind% gtr %snow% (Xcopy "%%~na" "C:\test\")
  7. if %wind% lss %snow% (echo please process the "%%~ni")
  8. )
  9. ))
  10. exit
复制代码

作者: friday011    时间: 2011-3-31 14:23

呵呵 自己写的这个没发看,测试了一下全是问题。。。

我的这个问题主要就是要解决 两个同名文件比较 如果大小不同  就做下处理。。这块是在是不会写。

还是等高手来帮我点一下吧。
作者: tmplinshi    时间: 2011-3-31 14:25

本帖最后由 tmplinshi 于 2011-3-31 14:26 编辑
  1. @echo off
  2. set "SrcDir=D:\A"
  3. set "DestDir=C:\B"
  4. for %%S in ("%SrcDir%\*") do (
  5.     if not exist "%DestDir%\%%~nxS" (
  6.         copy "%%S" "%DestDir%"
  7.     ) else (
  8.         for %%D in ("%DestDir%\%%~nxS") do (
  9.             if %%~zS gtr %%~zD (
  10.                 copy "%%~D" "%%~D.bak"
  11.                 copy "%%S" "%DestDir%"
  12.             ) else (
  13.                 if %%~zS lss %%~zD echo 请手动处理“%%~nxS” >con
  14.             )
  15.         )
  16.     )
  17. ) >nul
  18. echo 完成!请按任意键退出...
  19. pause >nul
复制代码

作者: friday011    时间: 2011-3-31 14:41

版主强大,谢谢版主!!!
也谢谢weichenxiehou 老兄和zm900612 老兄!!!
作者: CrLf    时间: 2011-3-31 15:21

本帖最后由 zm900612 于 2011-3-31 15:23 编辑

看楼主的意思,似乎不包括子文件夹,那可以这样:
  1. @echo off
  2. path "C:\B"
  3. (for /f "delims==" %%i in ('dir /b /a-d D:\A') do (
  4. if %%~z$PATH:i gtr %%~zi copy /y "D:\A\%%i" "C:\B\" else (
  5. if %%~z$PATH:i lss %%~zi echo>con 目标文件夹存在同样大小的"%%~nxi"
  6. )
  7. ))>nul
  8. pause
复制代码
%%~z$PATH:i适用范围很窄,但刚好跟这题对路
作者: ww0000    时间: 2022-1-15 11:52

回复 10# tmplinshi


    老师好,如果要包含子目录呢?
作者: ww0000    时间: 2022-1-15 11:53

回复 12# CrLf


    老师好,如果要包含子目录呢?




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