找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 36913|回复: 13

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

[复制链接]
发表于 2014-1-15 19:42:09 | 显示全部楼层 |阅读模式
本帖最后由 gannh 于 2014-5-31 15:06 编辑

现有两个文件夹,A和B。其中A和B文件夹中都有大量的,名称相同的文本文件。现想将A文件夹较大的文件同步到B文件夹下,请问各位大神有批处理命令可以实现吗?试过寻找很多工具都不行,只能在这里求助了,谢谢!
发表于 2014-1-15 20:25:19 | 显示全部楼层
回复 1# gannh
请明确说明较大的文件大到什么程度?
发表于 2014-1-15 21:01:28 | 显示全部楼层
系统不是有一个“公文包”嘛???点右键“新建”就看见了!~
 楼主| 发表于 2014-1-15 21:19:30 | 显示全部楼层
在1M,2M...不定,就是有些文件A文件夹的比B文件夹同名的要大,现在只想复制这些文件
发表于 2014-1-15 23:18:43 | 显示全部楼层
  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参数去掉
发表于 2014-1-15 23:30:01 | 显示全部楼层
这里加“会不会字符比较
发表于 2014-1-16 00:04:38 | 显示全部楼层
可处理空格
  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
复制代码
 楼主| 发表于 2014-1-16 12:18:22 | 显示全部楼层
回复 7# terse


   问题解决了, 谢谢terse哥,太感谢了,
 楼主| 发表于 2014-1-16 16:00:37 | 显示全部楼层
再请教terse哥,上面代码可否做个输出,统计显示复制了哪些文件和一共复制了多少个文件?还有的是上面代码:in (1,1,100),是什么含义?谢谢指教!
发表于 2014-1-16 16:22:32 | 显示全部楼层
还有的是上面代码:in (1,1,100),是什么含义?

for循环
从1到100执行100次
请看教程:
http://www.bathome.net/thread-2189-1-1.html
 楼主| 发表于 2014-1-16 16:28:23 | 显示全部楼层
回复 10# DAIC


    谢谢DAIC指教
发表于 2014-1-16 16:35:26 | 显示全部楼层
回复 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 以保证比较的字符相同长度
 楼主| 发表于 2014-1-16 21:51:44 | 显示全部楼层
回复 12# terse


    再次感谢terse哥指教,谢谢
发表于 2014-1-17 00:48:27 | 显示全部楼层
回复 6# terse


    那就去掉“”,加个 @ ,改成这样吧:
  1. if %%~za gtr %%~zb @ copy "%%~fa" "%path2%" /y
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-21 04:17 , Processed in 0.043610 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表