我正在寻找一个批处理脚本或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%
请提供一些见解或想法
答案 0 :(得分:2)
代码几乎没问题,除了:
usebackq
选项echo %G%
应为echo !%%G!
,当然您需要在脚本开头或循环之前setlocal enableDelayedExpansion。%%H
。()
进行多行for循环,否则将命令与同一行上的&
分开set
中使用引号,如下面的代码所示,以防值具有特殊字符。echo.
打印可能为空的行(/
,:
,(
可以用来代替点
for /f "delims== tokens=1,2 usebackq" %%G in ("input.txt") do (
set "%%G=%%H"
echo.%%H
)
答案 1 :(得分:1)
@echo off setlocal for /f "delims== tokens=1,2" %%G in ("input.txt") do set %%G=%%H echo %G%
您的批处理文件已关闭,但需要进行一些调整:
要阅读input.txt
循环中for
的内容,您需要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
答案 2 :(得分:0)
如果要使用PowerShell语法,可以:
$InputText = Get-Content "C:\Temp\input.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
比批处理文件更优雅:)