您可以使用批处理脚本并在其中设置三个变量,其中一个是 根源目录的路径 将遍历特定文件,第二个是 目的地路径 将复制新文件的位置,第三个是 要复制的文件名的文件列表 到目标目录。
使用这三个变量,您可以使用 FOR /R
循环遍历源位置并使用条件 IF
用于检查文件是否已存在的逻辑,用于需要对每个文件执行的任何复制或删除操作。此外,你可以使用 CALL
和 变量替换 将文件名的各个部分传递给另一个例程并使用其他例程 IF
逻辑与 SET /A
增加重复的文件号等
批处理脚本
@ECHO OFF
SET "source=C:\Folder_Source"
SET "dest=C:\Destination"
SET "FileList=file1.txt file2.txt file8.txt"
SET "dupCnt=1"
FOR /R "%source%" %%A IN (%FileList%) DO (
IF NOT EXIST "%dest%\%%~NXA" (
XCOPY /F /Y "%%~FA" "%dest%\" && IF EXIST "%%~FA" DEL /Q /F "%%~FA"
) ELSE (
CALL :DupeRoutine "%%~FA" "%%~NA" "%%~XA"
)
)
GOTO :EOF
:DupeRoutine
IF EXIST "%dest%\%~2_(%dupCnt%)%~3" (
SET /A dupCnt=%dupCnt%+1
CALL :DupeRoutine "%~1" "%~2" "%~3"
) ELSE (
IF NOT EXIST "%dest%\%~2_(%dupCnt%)%~3" ECHO F | XCOPY /Y /F "%~1" "%dest%\%~2_(%dupCnt%)%~3" && DEL /Q /F "%~1"
SET "dupCnt=1"
)
GOTO :EOF
结果
注意: 如果您希望重复的文件名使用另一个命名约定而不是 _(#)
我用过你需要的
改变了 _(%dupCnt%)
在脚本里面 "%dest%\%~2_(%dupCnt%)%~3"
成为你想要的任何其他格式
使用但是 %dupCnt%
是将增加的数字。我也很乐意为此做进一步的帮助。
来源之前
D:\Folder_Source
│ file1.txt
│ file2.txt
│ file4.txt
│ file8.txt
│ file99.txt
│
├───FolderA
│ file1.txt
│ file2.txt
│ file4.txt
│ file8.txt
│ file99.txt
│
└───FolderB
file1.txt
file2.txt
file4.txt
file8.txt
file99.txt
目的地之后
C:\Destination
file1.txt
file1_(1).txt
file1_(2).txt
file2.txt
file2_(1).txt
file2_(2).txt
file8.txt
file8_(1).txt
file8_(2).txt
来源之后
D:\Folder_Source
│ file4.txt
│ file99.txt
│
├───FolderA
│ file4.txt
│ file99.txt
│
└───FolderB
file4.txt
file99.txt
更多资源
- FOR / R.
- 如果
- XCOPY
- DEL
呼叫
批量替换(FOR /?)
另外,替换了FOR变量引用
增强。您现在可以使用以下可选语法:
%~I - expands %I removing any surrounding quotes (")
%~fI - expands %I to a fully qualified path name
%~nI - expands %I to a file name only
%~xI - expands %I to a file extension only
组
算术表达式(SET / a)
将表达式放在“引号”中对于简单算术是可选的
使用逻辑运算符的任何表达式都需要
任何 SET /A
返回小数结果的计算将是
向下舍入到最接近的整数。
要评估的表达式可以包括以下运算符:
+ Add set /a "_num=_num+5"
XCOPY
&安培;DEL
而不是MOVE
因为我也可以在该命令中加入一些验证条件逻辑。另请注意,移动时,文件将保留NTFS ACL属性,而使用时XCOPY
它从复制文件的位置继承ACL属性。通常,您希望在文件夹级别处理文件安全性,这是我更喜欢的另一个原因XCOPY
过度MOVE
虽然我用过Robocopy
我也经常不保持这样的欺骗。如果我可以进一步调整以满足您的需求,请告诉我。