2012-08-08 120 views
1

嗨誰能幫我解決這個問題。使用批處理文件創建多個文件

我需要創建多個文件?我給任何例子。在某個文件夾中,比如文件夾記錄。 「記錄」文件夾按名稱「example2tought1023.au」包含1個文件。我需要生成相同的文件包含,多次只需增加數字。

我應該得到導致這樣example2tought1023.au example3tought1024.au example4tought1025.au example5tought1026.au

這是我目前有:

SET count=9 

SET filename_1=example 
SET filename_2=thought 

SET extension=.au 

SET start_1=2 
SET start_2=1023 

SET source=%filename_1%%start_1%%filename_2%%start_2%%extension% 

FOR /L %%i IN (1, 1, %count%) DO (
    REM These two lines do not work! 
    SET /a n=%start_1%+%%i 
    SET /a number_2=%start_2% + %%i 

    SET destination=%filename_1%%number_1%%filename_2%%number_2%%extension% 

    ECHO %destination% 
    REM COPY %source% %destination% 
) 

PAUSE 

FOR /L循環線路不工作

+0

@ user3163527歡迎來到SO!這是一種常用的技術,只需簡單地「ECHO」所需的更改,以便OP可以驗證命令是否正確。在這種情況下,'COPY'命令是'REM'出來的。所有你需要做的就是一旦你確認結果被正確迴應,從'COPY'行刪除'REM'。這可以確保沒有任何事情發生*(如觀察到的),直到它被驗證。你會發現你的問題已被標記爲「不是答案」。這個是正常的。我們知道你沒有足夠的代表迴應評論。 – Magoo 2014-01-05 23:01:56

回答

2

你有誤識別哪些行不工作:-)

您有相對的問題當變量被擴展時變得更加艱難。使用百分比進行正常擴展時,會在解析該行時發生,並且您的整個FOR語句(包括括號括起來的DO子句)一次性解析。所以下面的一行

SET destination=%filename_1%%number_1%%filename_2%%number_2%%extension% 

是看到的價值觀%NUMBER_1%和%NUMBER_2%就存在被執行的循環之前。顯然不是你想要的。解決方案很簡單 - 您需要使用延遲擴展(運行時的值而不是解析時間)。您可以通過使用setlocal enableDelayedExpansion啓用延遲擴展功能,然後使用!number_1!而不是%number_1%來實現。

您與您的變量名稱(n vs number_1)不一致。

我想你想從0到count-1而不是從1到count。

在SET/A表達式中使用變量時,不必顯式擴展變量。您可以簡單地使用變量名稱而不用百分號或感嘆號。但是這隻適用於SET/A命令。

您還可以使用單個SET/A命令通過在每個賦值之間使用逗號來執行多個計算和賦值。

@echo off 
setlocal enableDelayedExpansion 

REM counts from 0 to count, so 8 = 9 copies 
set count=8 

set filename_1=example 
set filename_2=thought 

set extension=.au 

set start_1=2 
set start_2=1023 

set source=%filename_1%%start_1%%filename_2%%start_2%%extension% 

for /L %%i in (0, 1, %count%) do (
    set /a "number_1=start_1+%%i, number_2=start_2+%%i" 
    set destination=%filename_1%!number_1!%filename_2%!number_2!%extension% 
    echo !destination! 
    REM copy %source% !destination! 
) 

pause 
+0

看着他的期望輸出的例子,似乎他真的只是想每次加1,而不是%%我(這將最終加入1,2,3,4,5 ....) – SeanC 2012-08-08 15:09:28

+0

@SeanCheshire - Look小心 - 我將%% i添加到START值並將其分配給NUMBER變量,因此它提供了正確的值。我這樣做是因爲OP是如何構造原始代碼的。我編輯之前的版本更符合你所描述的內容,只需遞增一個值即可。但是這兩種方法都有相同的結果。 – dbenham 2012-08-08 15:14:24

+0

啊 - 好的。我*方式*更習慣於遞增,而不是添加到基數:D – SeanC 2012-08-08 15:18:19