循环变量集问题的cmd

循环变量集问题的cmd,cmd,Cmd,我有一个名为like的文件 HelfTool.txt Code1=Value1 Code2=Value2 我试图在cmd批处理文件中获取名为Code1和CODE2的变量,并使用相应的值。我写了下面的代码,但它给了我下面所述的错误 for /f tokens^=1^,^2^ delims^=^*^=^" %%b in (C:\HelfTool.txt) do if not defined "%%b" set "%%b"=%%c 未定义环境变量Code1 未定义环境变量Code2 我试图在批处理

我有一个名为like的文件

HelfTool.txt

Code1=Value1
Code2=Value2
我试图在cmd批处理文件中获取名为Code1和CODE2的变量,并使用相应的值。我写了下面的代码,但它给了我下面所述的错误

for /f tokens^=1^,^2^ delims^=^*^=^" %%b in (C:\HelfTool.txt) do if not defined "%%b" set "%%b"=%%c
未定义环境变量Code1
未定义环境变量Code2


我试图在批处理文件的开头定义这些变量,但没有用。有人能帮忙吗。

如果未定义,您的
是错误的
-不应引用变量名。应该是

if not defined %%b
set %%b=%%c
您的
set
命令错误-它创建了一个名称中带引号的变量。应该是

if not defined %%b
set %%b=%%c
或者更好的方法是,将整个赋值包含在一组引号中:

set "%%b=%%c"
您的FOR/F选项基本上是正确的,但我不明白您为什么要走一条艰难的路线,即转义一堆字符,而不是简单地使用引号。另外,我认为您不希望将
*
作为分隔符。你可以用

for /f "tokens=1,2 delims=="
或者更好(以防值包含一个
=
,但它不会在值中保留一个前导的
=

但是我不明白为什么要解析这行代码,或者为什么认为必须测试变量是否已经定义。在我看来,你可以简单地使用:

for /f "delims=" %%A in (C:\HelfTool.txt) do set "%%A"

您的
如果未定义
是错误的-不应引用变量名。应该是

if not defined %%b
set %%b=%%c
您的
set
命令错误-它创建了一个名称中带引号的变量。应该是

if not defined %%b
set %%b=%%c
或者更好的方法是,将整个赋值包含在一组引号中:

set "%%b=%%c"
您的FOR/F选项基本上是正确的,但我不明白您为什么要走一条艰难的路线,即转义一堆字符,而不是简单地使用引号。另外,我认为您不希望将
*
作为分隔符。你可以用

for /f "tokens=1,2 delims=="
或者更好(以防值包含一个
=
,但它不会在值中保留一个前导的
=

但是我不明白为什么要解析这行代码,或者为什么认为必须测试变量是否已经定义。在我看来,你可以简单地使用:

for /f "delims=" %%A in (C:\HelfTool.txt) do set "%%A"

您的
如果未定义
是错误的-不应引用变量名。应该是

if not defined %%b
set %%b=%%c
您的
set
命令错误-它创建了一个名称中带引号的变量。应该是

if not defined %%b
set %%b=%%c
或者更好的方法是,将整个赋值包含在一组引号中:

set "%%b=%%c"
您的FOR/F选项基本上是正确的,但我不明白您为什么要走一条艰难的路线,即转义一堆字符,而不是简单地使用引号。另外,我认为您不希望将
*
作为分隔符。你可以用

for /f "tokens=1,2 delims=="
或者更好(以防值包含一个
=
,但它不会在值中保留一个前导的
=

但是我不明白为什么要解析这行代码,或者为什么认为必须测试变量是否已经定义。在我看来,你可以简单地使用:

for /f "delims=" %%A in (C:\HelfTool.txt) do set "%%A"

您的
如果未定义
是错误的-不应引用变量名。应该是

if not defined %%b
set %%b=%%c
您的
set
命令错误-它创建了一个名称中带引号的变量。应该是

if not defined %%b
set %%b=%%c
或者更好的方法是,将整个赋值包含在一组引号中:

set "%%b=%%c"
您的FOR/F选项基本上是正确的,但我不明白您为什么要走一条艰难的路线,即转义一堆字符,而不是简单地使用引号。另外,我认为您不希望将
*
作为分隔符。你可以用

for /f "tokens=1,2 delims=="
或者更好(以防值包含一个
=
,但它不会在值中保留一个前导的
=

但是我不明白为什么要解析这行代码,或者为什么认为必须测试变量是否已经定义。在我看来,你可以简单地使用:

for /f "delims=" %%A in (C:\HelfTool.txt) do set "%%A"
下一个CLI输出可能会有所帮助:

==>for /f tokens^=1^,^2^ delims^=^*^=^" %b in (HelfTool.txt) do @echo set "%b=%c"
set "Code1=Value1"
set "Code2=Value2"
另一种方法:

==>for /f "tokens=*" %b in (HelfTool.txt) do @echo set "%b"
set "Code1=Value1"
set "Code2=Value2"
将要在
.bat
批处理脚本中使用的
%
(百分号)加倍,例如,最后一个命令应为

for /f "tokens=*" %%b in (HelfTool.txt) do @echo set "%%b"
下一个CLI输出可能会有所帮助:

==>for /f tokens^=1^,^2^ delims^=^*^=^" %b in (HelfTool.txt) do @echo set "%b=%c"
set "Code1=Value1"
set "Code2=Value2"
另一种方法:

==>for /f "tokens=*" %b in (HelfTool.txt) do @echo set "%b"
set "Code1=Value1"
set "Code2=Value2"
将要在
.bat
批处理脚本中使用的
%
(百分号)加倍,例如,最后一个命令应为

for /f "tokens=*" %%b in (HelfTool.txt) do @echo set "%%b"
下一个CLI输出可能会有所帮助:

==>for /f tokens^=1^,^2^ delims^=^*^=^" %b in (HelfTool.txt) do @echo set "%b=%c"
set "Code1=Value1"
set "Code2=Value2"
另一种方法:

==>for /f "tokens=*" %b in (HelfTool.txt) do @echo set "%b"
set "Code1=Value1"
set "Code2=Value2"
将要在
.bat
批处理脚本中使用的
%
(百分号)加倍,例如,最后一个命令应为

for /f "tokens=*" %%b in (HelfTool.txt) do @echo set "%%b"
下一个CLI输出可能会有所帮助:

==>for /f tokens^=1^,^2^ delims^=^*^=^" %b in (HelfTool.txt) do @echo set "%b=%c"
set "Code1=Value1"
set "Code2=Value2"
另一种方法:

==>for /f "tokens=*" %b in (HelfTool.txt) do @echo set "%b"
set "Code1=Value1"
set "Code2=Value2"
将要在
.bat
批处理脚本中使用的
%
(百分号)加倍,例如,最后一个命令应为

for /f "tokens=*" %%b in (HelfTool.txt) do @echo set "%%b"

我明白OP解析这行的原因了:如果变量存在(已经定义),就不要重新定义它。@JosefZ-我知道这将是最终结果,但这与我对OP想要什么的理解不符。我阅读此问题的意思是,变量应始终设置为文本文件中包含的值。
如果未定义%%b(设置%%b=%%c),则(rem不更改%%b)
-这是我阅读此问题的方式。事实上,我习惯于阅读代码,而不是到处闲聊(这是我的过错)。然而,你的回答和往常一样是熟练的。我明白OP为什么要分析这行:如果变量存在(已经定义),就不要重新定义它。@JosefZ-我知道这将是最终结果,但这与我对OP想要什么的理解不符。我阅读此问题的意思是,变量应始终设置为文本文件中包含的值。
如果未定义%%b(设置%%b=%%c),则(rem不更改%%b)
-这是我阅读此问题的方式。事实上,我习惯于阅读代码,而不是到处闲聊(这是我的过错)。然而,你的回答和往常一样是熟练的。我明白OP为什么要分析这行:如果变量存在(已经定义),就不要重新定义它。@JosefZ-我知道这将是最终结果,但这与我对OP想要什么的理解不符。我