2013-05-08 38 views
0

我喜歡從多個文件中逐個讀取輸入,並在轉到下一個文件之前處理該輸入。所有文件都有一個專門的名稱來定義它們的輸入順序。它如下所示:ordersheet_a_b_d。我雖然批處理文件中的以下代碼允許我按照for循環指定的順序讀取它們,但它不會執行任何操作。任何人都可能看到錯誤?我曾經在一個.bat文件如下:Windows批處理腳本 - 文件迭代問題

@echo off 
for %%a in (20, 40, 80) do (
for %%b in (80, 160) do (
for /l %%c in (1,1,3) do (
for /l %%d in (1,1,10) do (
for /l %%e in (1,1,6) do (
for /l %%f in (0,1,6) do ( 
if %%e LSS %%f (
if exist ordersheet_%%a_%%b_%%d echo " " %%e %%f >> output.txt 
if exist ordersheet_%%a_%%b_%%d START ThesisVelo.exe distancematrix_%%a.txt ordersheet_%%a_%%b_%%d %%c %%d %%e %%f >> output.txt 
) 
) 
) 
) 
) 
) 
) 
+0

尼斯,但你應該解釋從你的代碼更。 – Endoro 2013-05-08 20:10:35

+0

那麼,例如,第一個要讀取的文件應該是ordersheet_20_80_1,第二個ordersheet_20_80_2等等。無論如何,我認爲我做錯了%或什麼的.. – user2363790 2013-05-08 20:16:36

+0

沒有這個批處理運行的目錄的樣本,這是盲目的猜測。但是 - 假設目標文件存在,'%% e'將從1-6開始運行,'%% f'從0-6開始運行。在你的測試中,'%% f' = 0或1和'%% e' = 6永遠不能進入'if exists'語句。 – Magoo 2013-05-08 20:16:58

回答

0

批處理文件如下達到你原來的代碼相同的過程,但它有使代碼更清晰細微的修改,並顯示已處理的文件的名稱。請注意,我不知道你的代碼應該達到什麼程度!

@echo off 
setlocal EnableDelayedExpansion 
for %%a in (20 40 80) do (
    for %%b in (80 160) do (
     for /l %%c in (1,1,3) do (
     for /l %%d in (1,1,10) do (
      for /l %%e in (1,1,6) do (
       rem Just process values of %%f greater than %%e 
       set /A f=%%e+1 
       for /l %%f in (!f!,1,6) do (
        echo ordersheet_%%a_%%b_%%d c=%%c, d=%%d, e=%%e, f=%%f 
        if exist ordersheet_%%a_%%b_%%d (
        echo " " %%e %%f >> output.txt 
        START ThesisVelo.exe distancematrix_%%a.txt ordersheet_%%a_%%b_%%d %%c %%d %%e %%f >> output.txt 
       ) 
       ) 
      ) 
     ) 
    ) 
    ) 
) 

輸出的一些片段:

ordersheet_20_80_1 c=1, d=1, e=1, f=2 
ordersheet_20_80_1 c=1, d=1, e=1, f=3 
ordersheet_20_80_1 c=1, d=1, e=1, f=4 
ordersheet_20_80_1 c=1, d=1, e=1, f=5 
ordersheet_20_80_1 c=1, d=1, e=1, f=6 
ordersheet_20_80_1 c=1, d=1, e=2, f=3 
ordersheet_20_80_1 c=1, d=1, e=2, f=4 
ordersheet_20_80_1 c=1, d=1, e=2, f=5 
ordersheet_20_80_1 c=1, d=1, e=2, f=6 
ordersheet_20_80_1 c=1, d=1, e=3, f=4 
ordersheet_20_80_1 c=1, d=1, e=3, f=5 
ordersheet_20_80_1 c=1, d=1, e=3, f=6 
ordersheet_20_80_1 c=1, d=1, e=4, f=5 
ordersheet_20_80_1 c=1, d=1, e=4, f=6 
ordersheet_20_80_1 c=1, d=1, e=5, f=6 

ordersheet_20_80_2 c=1, d=2, e=1, f=2 
. . . 
ordersheet_20_80_2 c=1, d=2, e=5, f=6 

ordersheet_20_80_3 c=1, d=3, e=1, f=2 
. . . 
ordersheet_20_80_3 c=1, d=3, e=5, f=6 

ordersheet_20_80_4 c=1, d=4, e=1, f=2 
. . . 
ordersheet_20_80_4 c=1, d=4, e=5, f=6 

ordersheet_20_80_5 c=1, d=5, e=1, f=2 
. . . 
ordersheet_20_80_5 c=1, d=5, e=5, f=6 

ordersheet_20_80_6 c=1, d=6, e=1, f=2 
. . . 
ordersheet_20_80_6 c=1, d=6, e=5, f=6 

ordersheet_20_80_7 c=1, d=7, e=1, f=2 
. . . 
ordersheet_20_80_7 c=1, d=7, e=5, f=6 

ordersheet_20_80_8 c=1, d=8, e=1, f=2 
. . . 
ordersheet_20_80_8 c=1, d=8, e=5, f=6 

ordersheet_20_80_9 c=1, d=9, e=1, f=2 
. . . 
ordersheet_20_80_9 c=1, d=9, e=5, f=6 

ordersheet_20_80_10 c=1, d=10, e=1, f=2 
. . . 
ordersheet_20_80_10 c=1, d=10, e=5, f=6 


The same block above with c=2 and c=3 until: 
ordersheet_20_80_10 c=3, d=10, e=5, f=6 



The same whole block above, from: 
ordersheet_20_160_1 c=1, d=1, e=1, f=2 
until: 
ordersheet_20_160_10 c=3, d=10, e=5, f=6 




The same whole block above, from: 
ordersheet_40_80_1 c=1, d=1, e=1, f=2 
until: 
ordersheet_40_160_10 c=3, d=10, e=5, f=6 



The same, from: 
ordersheet_80_80_1 c=1, d=1, e=1, f=2 
until: 
ordersheet_80_160_10 c=3, d=10, e=5, f=6 
+0

非常感謝你Aacini,這對我來說非常有用!我不會詳細解釋,但是,這段代碼是用於測試自行車共享系統的VRP程序 – user2363790 2013-05-09 06:43:58

+0

我現在實際上有另一個問題。例如,我將文件ordersheet_20_80_1添加到包含.bat和.exe文件的地圖中。但是當我執行.bat文件時,似乎這行永遠不是真的'if exists ordersheet _ %% a _ %% b _ %% d('。Any ideas? – user2363790 2013-05-09 08:33:28