显示变量的值,将
我正在寻找一个批处理脚本或PowerShell脚本,从文本文件中读取值,并将它们放在脚本本地变量中。
例如,输入文件如下:
input.txt
PARAM1=VALUE1
PARAM2=VALUE2
PARAM3=VALUE3
在脚本中,我想将值放入三个不同的变量中,如:
echo %variable1%
echo %variable2%
echo %variable3%
输出将是:
value1
value2
value3
我开始脚本如下:
@echo off
setlocal
for /f "delims== tokens=1,2" %%G in ("input.txt") do set %%G=%%H echo %G%
请给我一些见解或想法
代码基本没问题,除了:
- 如果在中指定输入文件,则需要
-
usebackq
选项。 -
echo %G%
应该是echo !%%G!
,当然你需要在脚本开始或循环之前设置setlocal enabledelayeexpansion。或者在您的情况下,您可以简单地打印%%H
中的值。 - 对于多行for循环使用
()
,否则在同一行使用&
将命令分开 - 在
set
中使用引号,如果值有特殊字符,如下所示。 - 使用
echo.
打印可以为空的行(/
,:
,(
可以代替点)
for /f "delims== tokens=1,2 usebackq" %%G in ("input.txt") do (
set "%%G=%%H"
echo.%%H
)
我想从文件中读取值并将它们分配给脚本局部变量。
@echo off setlocal for /f "delims== tokens=1,2" %%G in ("input.txt") do set %%G=%%H echo %G%
你的批处理文件是接近的,但需要一些调整:
-
为了在
for
循环中读取input.txt
的内容,您需要type
文件 -
你的
echo
命令写错了,应该是%%G
而不是%%H
。
显示变量名
test.cmd:
@echo off
setlocal
for /f "delims== tokens=1,2" %%G in ('type input.txt') do (set %%G=%%H && echo %%G)
endlocal
示例用法:
F:test>type input.txt
PARAM1=VALUE1
PARAM2=VALUE2
PARAM3=VALUE3
F:test>test
PARAM1
PARAM2
PARAM3
显示变量的值,将echo %%G
替换为echo %%H
test.cmd:
@echo off
setlocal
for /f "delims== tokens=1,2" %%G in ('type input.txt') do (set %%G=%%H && echo %%H)
endlocal
示例用法:
F:test>type input.txt
PARAM1=VALUE1
PARAM2=VALUE2
PARAM3=VALUE3
F:test>test
VALUE1
VALUE2
VALUE3
进一步阅读
- 一个A-Z索引的Windows CMD命令行-一个很好的参考Windows CMD行相关的所有事情。
- for/f -根据另一个命令的结果循环命令。
- type -显示一个或多个文本文件的内容。
如果你想使用PowerShell语法可以:
$InputText = Get-Content "C:Tempinput.txt"
$i=0 #add inkrement
ForEach ($line in $InputText)
{
$i++ #increment for variable numbers
($line -split "=")[1] | Set-Variable -Name ("variable$i")
}
#Show variables
$variable1
$variable2
#and so
比批处理文件更优雅:)