2015-08-09 118 views
2

我想在for循環中使用變量skip參數,但它不會讓我這樣做。 這裏是我的代碼Windows批處理文件不能在語法中使用變量

@echo off 
setlocal ENABLEDELAYEDEXPANSION 

set /p testcase=<testcases.txt 
set /a end=%testcase%*13 

for /L %%P IN (1,13,%end%) DO (

    set skip=skip=%%P 
    echo !skip! 
    set vidx=0 

    for /f "%skip%" %%A in (testcases.txt) do (
     set /a vidx=!vidx! + 1 
     set var!vidx!=%%A 
    ) 
) 

這裏跳過跳過是= 1,但它不跳過任何行。當我用skip = 1替換它時。那麼它工作正常,但我想跳過變量no。每次迭代中的線條。請幫忙。

+2

這是一個錯字:應該是'「!skip!」'而不是'「%skip%」'? – wOxxOm

+1

也嘗試過使用它,它說「!跳過!」 「 – DarkNemesis

回答

3

我認爲這種邏輯的唯一選擇是一個子程序:

@echo off 
setlocal ENABLEDELAYEDEXPANSION 

set /p testcase=<testcases.txt 
set /a end=%testcase%*13 

for /L %%P IN (1,13,%end%) DO (

    set skip=skip=%%P 
    echo !skip! 
    set vidx=0 
    call :innerFor %%P 

) 

exit /b 0 

:innerFor 
    for /f "skip=%~1" %%A in (testcases.txt) do (
     set /a vidx=!vidx! + 1 
     set var!vidx!=%%A 
    ) 
exit /b 0 

FOR /F選項參數化是有點棘手.. 雖然我有你的文件沒有內容我不能測試,如果這個作品正確。

+0

該文件是一個簡單的文件,第一行包含一個整數T即測試用例的編號,後面是測試用例,每個測試用例有13行,每行包含一個整數 – DarkNemesis

+0

它的工作原理謝謝!雖然我不知道爲什麼早期的方法不起作用.. – DarkNemesis

+0

@DarkNemesis - 這是因爲'FOR/F'如何解析它的選項.1)參數/標記總是('%% A')即使在延遲擴展變量之後,它也總是被擴展。2)當'FOR'在批處理文件中遇到'%%'時,它會將其用於參數/標記定義,該定義使用比選項更高的prio參數 - 標記定義命令。行參數在FOR標記之前被擴展,所以它在子程序中起作用。 – npocmaka

相關問題