这段代码对我来说非常好。但我有相同名称的文件,而不是复制它们。请有人请告诉我如何做并修改它。
@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,不管是不是松散文件。
答案 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脚本在执行期间要处理的文件夹;所有这些使脚本更加清晰易懂。当然,如果您不需要它,只需在代码行中直接设置路径即可。