复制文件,不要覆盖

时间:2014-08-04 15:03:15

标签: batch-file windows-7

这段代码对我来说非常好。但我有相同名称的文件,而不是复制它们。请有人请告诉我如何做并修改它。

@echo off
mkdir c:\test 
dir C:\Users\Administrator\*.html /b /s > c:\test\output.txt 
for /F "tokens=*" %%a in (c:\test\output.txt) DO copy "%%a" "C:\Test"

所以我的目标是,如果他找到home.html现有的下一个,他会发现home1.html,home.blabla,不管是不是松散文件。

2 个答案:

答案 0 :(得分:2)

以下是该任务的简单解决方法。它为每个文件名添加一个随机数。

@echo off
setlocal enabledelayedexpansion
mkdir "c:\test"
dir "C:\Users\Administrator\*.html" /b /s /a-d > "c:\test\output.txt"
for /F "usebackq delims=" %%a in ("c:\test\output.txt") DO copy "%%a" "C:\Test\%%~na - !random!!random!%%~xa"

答案 1 :(得分:1)

我建议你创建一个调用子程序的for循环,如下例所示:

  

@echo off

     

设置/ p FOLDER_1 ="文件夹路径n.1:"
设置/ p FOLDER_2 ="文件夹路径n.2:"
  dir"%FOLDER_1%" / a:-d / b> output.txt的

     

for / f" tokens = *" %% a in(output.txt)do(
cd"%FOLDER_2%"
如果存在   %% a(
电话:TRUE %% a
)否则(复制"%FOLDER_1%\ %% a""。\ %% a&# 34;


转到   :EOF

     

:TRUE
设置NUM = 1
:TRUE_SUBLABEL
设置" FILENAME =%~n1_%NUM %% ~x1"
设置/ a   NUM =%NUM%+ 1如果存在"%FILENAME%" (
转到TRUE_SUBLABEL
)其他(
副本   "%FOLDER_1%\%1" "。\%FILENAME%"

转到EOF

     

:EOF
暂停

for周期调用子例程允许在其中设置goto语句,这对于在文件名中创建增加值是必要的。使用setlocal EnableDelayedExpansion无法做到这一点。

编辑:我在第一行添加了两个set语句来设置此Batch脚本在执行期间要处理的文件夹;所有这些使脚本更加清晰易懂。当然,如果您不需要它,只需在代码行中直接设置路径即可。