Board logo

标题: [文本处理] [已解决]两个文件夹,N个文本文件,请问批处理如何实现只同步较大的文本文件 [打印本页]

作者: gannh    时间: 2014-1-15 19:42     标题: [已解决]两个文件夹,N个文本文件,请问批处理如何实现只同步较大的文本文件

本帖最后由 gannh 于 2014-5-31 15:06 编辑

现有两个文件夹,A和B。其中A和B文件夹中都有大量的,名称相同的文本文件。现想将A文件夹较大的文件同步到B文件夹下,请问各位大神有批处理命令可以实现吗?试过寻找很多工具都不行,只能在这里求助了,谢谢!
作者: battab    时间: 2014-1-15 20:25

回复 1# gannh
请明确说明较大的文件大到什么程度?
作者: cjiabing    时间: 2014-1-15 21:01

系统不是有一个“公文包”嘛???点右键“新建”就看见了!~
作者: gannh    时间: 2014-1-15 21:19

在1M,2M...不定,就是有些文件A文件夹的比B文件夹同名的要大,现在只想复制这些文件
作者: netbenton    时间: 2014-1-15 23:18

  1. @echo off
  2. set /p path1=输入A文件夹:
  3. set /p path2=输入B文件夹:
  4. for %%a in (%path1%\*.*) do (
  5. for /f "tokens=*" %%b in ("%path2%\%%~nxa") do (
  6. if "%%~za" gtr "%%~zb" copy "%%~fa" "%path2%" /y
  7. )
  8. )
  9. pause
复制代码
注意:
1,文件夹及路径不能含有空格,不然出错
2,有更新时会不会提示,直接覆盖。若需要提示,则把/y参数去掉
作者: terse    时间: 2014-1-15 23:30

这里加“会不会字符比较
作者: terse    时间: 2014-1-16 00:04

可处理空格
  1. @echo off&setlocal enabledelayedexpansion
  2. set /p path1=输入A文件夹:
  3. set /p path2=输入B文件夹:
  4. for /L %%i in (1,1,100) do set "t=!t!0!"
  5. cd /d "%path1%\"
  6. for %%i in (*.*) do (
  7.     if exist "%path2%\%%~nxi" (
  8.        for %%j in ("%path2%\%%~nxi") do (
  9.            set "az=!t!%%~zi"
  10.            set "bz=!t!%%~zj"
  11.            if "!az:~-100!" gtr "!bz:~-100!" copy "%%i" "%path2%"
  12.         )
  13.     )
  14. )
  15. pause
复制代码

作者: gannh    时间: 2014-1-16 12:18

回复 7# terse


   问题解决了, 谢谢terse哥,太感谢了,
作者: gannh    时间: 2014-1-16 16:00

再请教terse哥,上面代码可否做个输出,统计显示复制了哪些文件和一共复制了多少个文件?还有的是上面代码:in (1,1,100),是什么含义?谢谢指教!
作者: DAIC    时间: 2014-1-16 16:22

还有的是上面代码:in (1,1,100),是什么含义?

for循环
从1到100执行100次
请看教程:
http://www.bathome.net/thread-2189-1-1.html
作者: gannh    时间: 2014-1-16 16:28

回复 10# DAIC


    谢谢DAIC指教
作者: terse    时间: 2014-1-16 16:35

回复 9# gannh
  1. @echo off&setlocal enabledelayedexpansion
  2. set /p path1=输入A文件夹:
  3. set /p path2=输入B文件夹:
  4. for /L %%i in (1,1,100) do set "t=!t!0!"
  5. cd /d "%path1%\"
  6. for %%i in (*.*) do (
  7.     if exist "%path2%\%%~nxi" (
  8.        for %%j in ("%path2%\%%~nxi") do (
  9.            set "az=!t!%%~zi"
  10.            set "bz=!t!%%~zj"
  11.            if "!az:~-100!" gtr "!bz:~-100!" (
  12.               xcopy /f /y "%%i" "%path2%"
  13.               set /a n+=1
  14.            )
  15.         )
  16.     )
  17. )
  18. echo 共复制文件 !n! 个
  19. pause
复制代码
这里的变量T是补位字符 后面同时截取100 以保证比较的字符相同长度
作者: gannh    时间: 2014-1-16 21:51

回复 12# terse


    再次感谢terse哥指教,谢谢
作者: netbenton    时间: 2014-1-17 00:48

回复 6# terse


    那就去掉“”,加个 @ ,改成这样吧:
  1. if %%~za gtr %%~zb @ copy "%%~fa" "%path2%" /y
复制代码





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