2012-10-05 70 views
3

以下代碼將採用批處理文件的所有命令行參數。在我的情況下,我有大約30個命令行參數,它們都是1,2或3的數字。我接受它們,然後想要將它們重新分配給其他字符。我想要每個var,如果它是1,則將其更改爲/ *,如果它是2,則將其更改爲* /,如果它是3,則將其更改爲#。批處理文件 - 如何使用for循環對所有特定變量進行批量更改

第一部分工作得很好,它是重新分配的第二部分,我無法獲取語法。

SETLOCAL ENABLEDELAYEDEXPANSION 
set count=1 
FOR %%i IN (%*) DO (
    set var!count!=%%i 
    set var!count!=!var!count!:1=/*! <--don't work 
    set var!count!=!var!count!:2=*/! <--don't work 
    set var!count!=!var!count!:3=#! <--don't work 
    set /a count=!count!+1 
) 

回答

2

的問題是訪問陣列構件的方式。

就你而言,最好的方法似乎是使用一個臨時變量。

SETLOCAL ENABLEDELAYEDEXPANSION 
set count=1 
FOR %%i IN (%*) DO (
    set "temp=%%i" 
    set "temp=!temp:1=/*!" 
    set "temp=!temp:2=*/!" 
    set "temp=!temp:3=#!" 
    set "var!count!=!temp!" 
    set /a count+=1 
) 
+0

+1;哦,不是我會怎麼做,但我喜歡那個簡單的解決方案。 – dbenham

2

我認爲jeb有最簡單的解決方案,但還有其他選擇。

1)您可以將當前計數值轉換爲FOR變量。這是我傾向於這樣做的方式。

SETLOCAL ENABLEDELAYEDEXPANSION 
set count=1 
FOR %%i IN (%*) DO (
    for %%N in (!count!) do (
    set "var%%N=%%i" 
    set "var%%N=!var%%N:1=/*!" 
    set "var%%N=!var%%N:2=*/!" 
    set "var%%N=!var%%N:3=#!" 
) 
    set /a count+=1 
) 

2)可以在通話延遲外部變量的擴張,但因爲正常的擴張並不如延遲擴展爲安全的,我不喜歡這個選項。

SETLOCAL ENABLEDELAYEDEXPANSION 
set count=1 
FOR %%i IN (%*) DO (
    set "var!count!=%%i" 
    call set "var!count!=%%var!count!:1=/*%%" 
    call set "var!count!=%%var!count!:2=*/%%" 
    call set "var!count!=%%var!count!:3=#%%" 
    set /a count+=1 
)