Board logo

标题: [文件操作] [已解决] 求高手,文件批量复制时先比较大小再决定是否覆盖 [打印本页]

作者: nwj@tom.com    时间: 2014-11-28 10:17     标题: [已解决] 求高手,文件批量复制时先比较大小再决定是否覆盖

本帖最后由 nwj@tom.com 于 2014-11-29 15:52 编辑

我下载了一些文件,想把2个不同的文件夹合并到一起。遇到重名文件时,我需要保留体积较小的文件。  当把一个文件夹里面的所有文件移动到另外一个文件夹,遇到相同的名字的文件的时候,自动选择保留小文件。假设文件夹是 F:\A 复制到F:\B
几万个文件一个个判断太麻烦了,所以,曾经在网上找到过一个简单的批处理文件,使用了很多年。近来升级电脑,没注意丢失了这个小小的却万分重要的文件,因此,求各位大神,能否帮忙!
谢谢先!


补充:在网上找到一下这个类似的批处理文件,但不太符合我的要求,请哪位高手帮我修改一下:


”打开记事本程序把下面代码贴进去,修改目录名后,保存到任意位置后缀为.bat双击运行:

@echo off&color f1
:: 假定把d:\a复制到e:\b
set d1=d:\a
set d2=e:\b
cd/d "%d1%"
echo.正在复制,请等候...
for /f "delims=" %%i in ('dir/b/a-d *.txt')do (
  if not exist "%d2%\%%i" (copy "%%i" "%d2%\">nul)else (
     for /f "delims=" %%j in ('dir/b/a-d "%d2%\%%i"')do (
       if %%~zi gtr %%~zj copy/y "%%i" "%d2%\">nul)
))
echo/echo 复制完毕 &ping /n 3 127.1>nul“


作者: DAIC    时间: 2014-11-28 10:53

xcopy /d 可以吗?它可以实现新文件覆盖旧文件
作者: nwj@tom.com    时间: 2014-11-28 16:44

回复 2# DAIC


如何实现:先比较大小,再自动判断是否覆盖?
作者: apang    时间: 2014-11-28 22:02

  1. @echo off & setlocal enabledelayedexpansion
  2. set "srcDir=F:\A"
  3. set "dstDir=F:\B"
  4. set "s=00000000000000000000"
  5. pushd "%srcDir%\"
  6. for /f "delims=" %%a in ('dir /a-d /b') do (
  7.         if exist "%dstDir%\%%a" (
  8.                 set "sz1=!s!%%~za"
  9.                 for %%b in ("%dstDir%\%%a") do set "sz2=!s!%%~zb"
  10.                 if "!sz1:~-20!" lss "!sz2:~-20!"  move "%%a" "%dstDir%\"
  11.         ) else move "%%a" "%dstDir%\"
  12. )
  13. pause
复制代码

作者: nwj@tom.com    时间: 2014-11-29 01:09

真是高手啊,验证了一下,比原来那个好用多了!真是佩服的五体投地!!万分感谢
作者: CrLf    时间: 2014-11-29 01:23

回复 5# nwj@tom.com


    那给 apang 大师加分感谢呗~顺便把帖子标题前面加个[已解决]
作者: nwj@tom.com    时间: 2014-11-29 15:53

想给16分全给,怎么不行?对不起了,大师




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