批处理脚本或PowerShell脚本,用于从文本文件中读取多个值并插入到变量中

时间:2016-08-24 19:37:56

标签: windows powershell batch-file cmd

我正在寻找一个批处理脚本或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%

请提供一些见解或想法

3 个答案:

答案 0 :(得分:2)

代码几乎没问题,除了:

    如果在doublequotes中指定输入文件,则需要
  • 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%

您的批处理文件已关闭,但需要进行一些调整:

  1. 要阅读input.txt循环中for内容,您需要type该文件。

  2. 您的echo命令有误,应该是%%G而不是%%H

  3. 显示变量名称

    <强> 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

比批处理文件更优雅:)