下應該做的伎倆:
@echo off
set Source=C:\Users\siddique.gaffar\Desktop\Artworks
set Target=C:\Users\siddique.gaffar\Desktop\Artworks Copy
set FileList=C:\Users\siddique.gaffar\Desktop\Artwork TXT File\Book1.txt
echo.
if not exist "%Source%" echo Source folder "%Source%" not found & goto Exit
if not exist "%FileList%" echo File list "%FileList%" not found & goto Exit
if not exist "%Target%" md "%Target%"
for /F "usebackq tokens=1-2" %%a in ("%FileList%") do call :CopyFile "%%a" %%b
:Exit
echo.
echo press the Space Bar to close this window.
pause > nul
exit /b 0
:CopyFile
:: first argument = filename
:: second argument = number of copies
REM A little trick that will put limit on 0 if second argument is empty or not a number
set secondarg=%~2
set /a limit=secondarg
REM if limit is invalid (not strict positive), exit the function
IF %limit% LEQ 0 (
echo Invalid number of copies
exit /b 1
)
IF NOT EXIST "%Target%\%~1" (
copy "%Source%\%~1" "%Target%"
IF %limit% LEQ 1 exit /b 0
set /a limit-=1
)
REM File already exists: search correct index for filename
set index=0
set "targetfile=%target%\%~n1"
set file_ext=%~x1
:following
set /a index+=1
Rem if file with index %index% already exists, go back to get following index
IF exist "%targetfile%(%index%).%file_ext%" goto :following
Rem we have the correct index, now we can copy
set /a limit=index+limit-1
FOR /L %%g IN (%index%,1,%limit%) DO copy "%Source%\%~1" "%targetfile%(%%g).%file_ext%"
exit /b 0
,如果你有長文件名,另一種選擇是使用usebackq
和周圍加上雙引號的路徑在for f
循環,而不是分析type
命令的輸出。
函數:CopyFile
用IF EXIST
檢查文件是否存在,並使用計數器爲新文件的文件名查找下一個索引。它使用path manipulation構建一個帶有索引的新文件名。
編輯:我添加了從文本文件中讀取所需的副本數並將該數字指定爲:CopyFile
函數的第二個參數的可能性。如果沒有給出號碼或號碼不是嚴格的正數(大於0),它將不會複製。
PS:「小伎倆」我用,將設置%limit%
爲0的情況下,第二個參數是空的作品,因爲set
與/a
標誌將取代空變量爲0。這個如果你使用參數變量將無法正常工作直接的回答:如果第二個參數爲空
set /a limit=%~2
將拋出一個錯誤,因爲CMD解析器將取代%~2
一個空字符串,它會執行set /a limit=
這是使用/a
標誌無效assignement。但是,如果你使用一個額外的變量作爲過境
set var=%~2
set /a limit=var
你讓set
處理變量擴展,而不是CMD解釋。 set
將看到var
變量爲空(在%2
爲空的情況下),並將用0替換它。
問題是模糊的。該批處理是否應避免覆蓋目標中已存在的文件,或者是否應該在文件列表中提及雙重文件時複製源文件? – LotPings
如果目標文件中還有一個'file1(1).txt'怎麼辦? – aschipfl
相關:[使批處理文件保留兩個文件時發生名稱衝突](http://stackoverflow.com/q/14033582) – aschipfl