[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

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

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

回复 1# gannh
请明确说明较大的文件大到什么程度?
学习中

TOP

系统不是有一个“公文包”嘛???点右键“新建”就看见了!~
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

在1M,2M...不定,就是有些文件A文件夹的比B文件夹同名的要大,现在只想复制这些文件

TOP

  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参数去掉

TOP

这里加“会不会字符比较

TOP

可处理空格
  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
复制代码

TOP

回复 7# terse


   问题解决了, 谢谢terse哥,太感谢了,

TOP

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

TOP

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

for循环
从1到100执行100次
请看教程:
http://www.bathome.net/thread-2189-1-1.html

TOP

回复 10# DAIC


    谢谢DAIC指教

TOP

回复 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 以保证比较的字符相同长度

TOP

回复 12# terse


    再次感谢terse哥指教,谢谢

TOP

回复 6# terse


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

TOP

返回列表