2014-07-24 61 views
0

我希望批處理腳本從配置文件讀取變量。
而我想在配置文件中使用var。
所以我把下面的內容到我的配置文件eval.ini批處理腳本如何識別字符串中的變量

所以,我怎樣才能使這些增值經銷商在配置文件中的批處理腳本識別。


在那一刻,我如何讓它工作是閱讀行「eval.ini」行,並拆分一條線變成了變數名稱和VAR值。

Galaxy:=%Universal%\Galaxy ==>> Galaxy %Universal%\Galaxy 

,並把它們變成一個臨時的批處理腳本混合likd這樣的:

SET "Galaxy=%Universal%\Galaxy" 

然後我打電話臨時批處理腳本,設置所有的增值經銷商。它的工作原理。

看起來不錯,但我只是不喜歡創建臨時批處理腳本文件來做到這一點。
請告訴我任何其他方式來做到這一點。


我的批處理腳本 「eval.bat」:

@ECHO OFF 
SETLOCAL ENABLEDELAYEDEXPANSION 

:SOA 
    SET "confile=%~dpn0.ini" 
    SET "setvar=%temp%\%~n0_setvar.bat" 
    SET "varlist=" 

    ECHO/>%setvar% 
    FOR /F "usebackq tokens=1,* eol=; delims=:=" %%a in ("%confile%") do (
     IF NOT "!varlist!" == "" (
      SET "separator= " 
     ) else (
      SET "separator=" 
     ) 
     SET "varlist=!varlist!!separator!^"%%a^"" 
     ECHO/SET "%%a=%%b">>%setvar% 
    ) 
    CALL "%setvar%" && del/q/f "%setvar%" || GOTO:EOA 
    FOR %%a in (%varlist%) do (
     ECHO/%%~a = !%%~a! 
    ) 

:EOA 
    ENDLOCAL 
    EXIT/B 

OUTPUT:

Universal = C:\Universal 
Galaxy = C:\Universal\Galaxy 
Sagittarius = C:\Universal\Sagittarius 
Canis Major = C:\Universal\Canis Major 
Sun = C:\Universal\Galaxy\Sun 
Sirius = C:\Universal\Canis Major\Sirius 
+0

您是否堅持使用':='?如果你只用'='來代替,那麼有一個非常簡短的解決方案。 – Stephan

+0

@Stephan如果我用'='會怎麼樣? – mts

+0

Argh - 我監督,你使用新定義的變量作爲新變量的子字符串。抱歉混淆。忘記我的評論。 – Stephan

回答

1
@ECHO OFF 
SETLOCAL ENABLEDELAYEDEXPANSION 

:SOA 
SET "confile=q24928414.txt" 
SET "setvar=%temp%\%~n0_setvar.bat" 
SET "varlist=" 

FOR /F "usebackq tokens=1*delims=:=" %%a in ("%confile%") do (
CALL SET "%%a=%%b" 
ECHO %%a = !%%a! 
) 

:EOA 
GOTO :EOF 

我更換輸入文件與q24928414.txt適合我的系統。

適合我!

- 編輯如下MC ND的回覆

+0

爲什麼不直接'CALL SET'%% a = %% b「'而不是兩步? –

+0

@MCND:非常重要的原因。我與delayedexpansion結合得太緊了,忽視了明顯的。 – Magoo

+0

@Magoo謝謝你,它的工作原理。但爲什麼?或者'SET「%% a = %% b」'和'CALL SET %% a = %% b'之間有什麼區別,我嘗試了第一個,但失敗了。 – mts