2014-11-14 70 views
0

我有一個乍一看很容易的問題。BATCH:將Txt文件的每一行轉換爲系統變量

我必須配置連接有1-4個磁盤的SAS控制器。 因此我必須知道在哪個插槽中連接了驅動器。 這我可以解決,結果是一個文本文件包含分1和最多4個條目。

現在我想讀這個文件的每一行,並將它們轉換爲系統變量。 這是我嘗試:

for /f %%i in (disp.txt) do (
    set slot_1=%%i 
    set slot_2=%%j 
    set slot_3=%%k 
    set slot_4=%%l 
) 

結果是這樣的

Slot_1=3 
Slot_2=%j 
Slot_3=%l 
Slot_4=%l 

什麼i'm做錯了什麼?

PS: 是的,我發現BATCH/CMD: Print each line of a .txt into a variable - 但它的不一樣

PPS: 的disp.txt看起來是這樣的:

1 
2 
3 
4 

回答

0

你有什麼不工作的原因是因爲FOR /F ... IN (filename) DO ...將在文件的每一行上操作(將其拆分成記錄)並將第一條記錄分配給%i。因此,%i將被設置爲1,2,3,4(您的dist.txt示例),每次循環一次。

您可以在要分配的變量的名稱中使用變量值(儘管在FOR循環中要這樣做需要啓用延遲變量擴展,請查找!而不是%來訪問變量)。

腳本的這個修改後的版本可能會做你想要什麼:

SETLOCAL ENABLEDELAYEDEXPANSION 

SET IDX=1 
FOR /F %%i IN (disp.txt) DO (
    SET "slot_!IDX!=%%i" 
    SET /A IDX+=1 
) 

它將爲任意數量的disp.txt線的工作。