求一复制的批处理 : 从A文件夹复制文件到B文件夹,如果文件名相同,大小相同,则覆盖, 如果文件名相同,大小不

同则重命名,重命名规则为在原名后加(N),N为1,2,3...这样自然顺序下去.... 同则重命名,重命名规则为在原名后加(N),N为1,2,3...这样自然顺序下去. 展开
 我来答
己闻楣Sx
2011-10-21 · TA获得超过1935个赞
知道大有可为答主
回答量:1057
采纳率:93%
帮助的人:888万
展开全部
@ECHO OFF
SETLOCAL EnableDelayedExpansion
REM 若准备留存为一个批处理,以后通过传入参数的方式运行,则不必修改
REM 若仅为一次性的处理,亦可将下面两句分别改为SET SourceDir=A和SET SourceDir=B
SET SourceDir=%~f1
SET TargetDir=%~f2

REM 判断参数是否合格,不合格的予以提示后退出
IF "%TargetDir%"=="" GOTO ShowUsage

REM 开始真正的活儿...
PUSHD "%SourceDir%"
FOR /F "UseBackQ Delims=" %%F IN (`DIR /B /A-D /ON`) DO (
ECHO -- %%F
SET SourceSize=%%~zF
IF EXIST %TargetDir%\%%F (
REM 文件名相同,详细处置...
FOR %%K IN (%TargetDir%\%%F) DO (
IF !SourceSize! EQU %%~zK(
REM 文件名与大小均相同,覆盖之...
COPY /Y %%F %TargetDir%>NUL
) ELSE (
REM 名同大小异,更名复制;最多同名一千个,应该不会超出吧...
REM 如果确保文件同名的机会更少,可将下面的999改得小一些,以提高处理速度
SET /A FileOrder=1
FOR /L %%I IN (1,1,999) DO (
SET NewName=%%~nF^(!FileOrder!^)%%~xF
IF EXIST %TargetDir%\!NewName! (
FOR %%X IN (%TargetDir%\!NewName!) DO (
REM 看看带有(N)的文件是否与原文件大小相同,如相同,则覆盖,否则才递增N
IF !SourceSize! NEQ %%~zX SET /A FileOrder+=1
)
)
)
COPY /Y %%F %TargetDir%\!NewName!>NUL
)
)
) ELSE (
REM 文件名不同,径直复制...
COPY %%F %TargetDir%>NUL
)
)
POPD
GOTO End

:ShowUsage
ECHO 用法:%~n0 原始路径 目标路径>&2
ECHO 说明:路径尾部不要带\,如“D:\MyData”合格,“F:\MyData\”不合格>&2
GOTO End

:End
ENDLOCAL
追问
貌似不行,一闪就没了....
追答
测试过,应该没问题,看看头几行的说明,最好给SourceDir、TargetDir赋予A和B的全路径,如D:\MyData\A之类的。
veket_linux
2011-10-21 · TA获得超过4092个赞
知道大有可为答主
回答量:3809
采纳率:0%
帮助的人:4427万
展开全部
强烈建议 用au3做 批处理比较文件大小也太蛋疼了吧

写个au3脚本源代码给你 先写个复制单个文件的 想要更复杂功能请留下邮箱

; 复制 d:\abc\fgh.txt 到 d:\xyz

If Not FileExists("d:\xyz\fgh.txt") Then
FileCopy("d:\abc\fgh.txt","d:\xyz")
Else
If FileGetSize("d:\abc\fgh.txt") = FileGetSize("d:\xyz\fgh.txt") Then
FileCopy("d:\abc\fgh.txt","d:\xyz",1)
Else
$i = 1
While FileExists("d:\xyz\fgh("&$i&").txt")
$i += 1
WEnd
FileCopy("d:\abc\fgh.txt","d:\xyz\fgh("&$i&").txt")
EndIf
EndIf
追问
感谢1楼,,我又发现有时文件相同,但是文件名还是不同,那样复制还会有重复的文件在那里,
我换了一个思路,,先复制过去(win7自带同名重名命),,现在要实现这样的功能:
如果2个文件大小完全相同,则删掉其中文件名较长或数字较大的一个,,PS:文件名命名规则如88,88(1),99(7)之类的..

MAIL: jilishan@163.com
追答
请把 你需要的功能 详细描述 发送邮件到 腾讯邮箱  522083856
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式