BATCH:将每行Txt文件转换为系统变量

时间:2014-11-14 12:35:22

标签: variables batch-file process line

乍一看,我有一个简单的问题。

我必须配置一个附带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

我做错了什么?

P.S .: 是的,我找到BATCH/CMD: Print each line of a .txt into a variable - 但它不一样

P.P.S .: disp.txt看起来像这样:

1
2
3
4

1 个答案:

答案 0 :(得分: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中的任意行数。