求一复制的批处理 : 从A文件夹复制文件到B文件夹,如果文件名相同,大小相同,则覆盖, 如果文件名相同,大小不 如何编写批处理代码复制文件夹A中的文件及文件夹到文件夹B,要...

作者&投稿:卫湛 (若有异议请与网页底部的电邮联系)
@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

强烈建议 用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

批处理如何将A文件夹内的所有文件移动到B文件夹,如果遇到相同名字的文件则重命名。~

@echo offset A=Aset B=AREM 注:以上两行是设置AB文件for /f "tokens=*" %%i in ('dir %A%\*.mp3 /b') do ( if exist "%B%\%%i" ( move "%A%\%%i" "%B%\%%~ni_5.mp3" >nul echo "%A%\%%i"→ "%B%\%%~ni_5.mp3" ) else ( move "%A%\%%i" "%B%\" >nul echo "%A%\%%i"→ "%B%\" ))pause

现在流行autoit自动化脚本 写个给你看看吧

#include
$src = "d:\a"
$tag = "d:\b"
$n = 0;
$src_list = _FileListToArray($src, "*")
For $i = 1 To $src_list[0]
If FileExists($tag & "\" & $src_list[$i]) Then
$n += 1
If StringInStr(FileGetAttrib($src & "\" & $src_list[$i]), "D") Then
DirCopy($src & "\" & $src_list[$i], $tag & "\" & $src_list[$i] & "(" & $n & ")")
Else
$p = StringInStr($src_list[$i], ".", 0, -1)
If Not $p Then
FileCopy($src & "\" & $src_list[$i], $tag & "\" & $src_list[$i] & "(" & $n & ")")
Else
$filename = StringLeft($src_list[$i], $p-1) & "(" & $n & ")" & StringMid($src_list[$i], $p)
FileCopy($src & "\" & $src_list[$i], $tag & "\" & $filename)
EndIf
EndIf
Else
If StringInStr(FileGetAttrib($src & "\" & $src_list[$i]), "D") Then
DirCopy($src & "\" & $src_list[$i], $tag)
Else
FileCopy($src & "\" & $src_list[$i], $tag)
EndIf
EndIf
Next