标题: [文件操作] [已解决]批处理怎样处理不同目录下的两个文件夹中的文件? [打印本页]
作者: 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文件夹中没有的。- 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
我自己照葫芦画瓢 写了一个 不过问题很多,给大家发下,大家帮我改改~~~
谢谢啦~~~~- @echo off
- Xcopy /y /e /d "D:\test\*.*" "C:\test\"
- for /r C:\test\ %%i in (*) do set wind=%%~z1 (
- for /r D:\test\ %%a in (*) do set snow=%%~z1 (
- if "%%~ni"=="%%~na" (
- if %wind% gtr %snow% (Xcopy "%%~na" "C:\test\")
- if %wind% lss %snow% (echo please process the "%%~ni")
- )
- ))
- exit
复制代码
作者: friday011 时间: 2011-3-31 14:23
呵呵 自己写的这个没发看,测试了一下全是问题。。。
我的这个问题主要就是要解决 两个同名文件比较 如果大小不同 就做下处理。。这块是在是不会写。
还是等高手来帮我点一下吧。
作者: tmplinshi 时间: 2011-3-31 14:25
本帖最后由 tmplinshi 于 2011-3-31 14:26 编辑
- @echo off
-
- set "SrcDir=D:\A"
- set "DestDir=C:\B"
-
- for %%S in ("%SrcDir%\*") do (
- if not exist "%DestDir%\%%~nxS" (
- copy "%%S" "%DestDir%"
- ) else (
- for %%D in ("%DestDir%\%%~nxS") do (
- if %%~zS gtr %%~zD (
- copy "%%~D" "%%~D.bak"
- copy "%%S" "%DestDir%"
- ) else (
- if %%~zS lss %%~zD echo 请手动处理“%%~nxS” >con
- )
- )
- )
- ) >nul
-
- echo 完成!请按任意键退出...
- pause >nul
复制代码
作者: friday011 时间: 2011-3-31 14:41
版主强大,谢谢版主!!!
也谢谢weichenxiehou 老兄和zm900612 老兄!!!
作者: CrLf 时间: 2011-3-31 15:21
本帖最后由 zm900612 于 2011-3-31 15:23 编辑
看楼主的意思,似乎不包括子文件夹,那可以这样:- @echo off
- path "C:\B"
- (for /f "delims==" %%i in ('dir /b /a-d D:\A') do (
- if %%~z$PATH:i gtr %%~zi copy /y "D:\A\%%i" "C:\B\" else (
- if %%~z$PATH:i lss %%~zi echo>con 目标文件夹存在同样大小的"%%~nxi"
- )
- ))>nul
- pause
复制代码
%%~z$PATH:i适用范围很窄,但刚好跟这题对路
作者: ww0000 时间: 2022-1-15 11:52
回复 10# tmplinshi
老师好,如果要包含子目录呢?
作者: ww0000 时间: 2022-1-15 11:53
回复 12# CrLf
老师好,如果要包含子目录呢?
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |