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



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

你的批处理文件是接近的,但需要一些调整:

  1. 为了在for循环中读取input.txt内容,您需要type文件

  2. 你的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

比批处理文件更优雅:)

最新更新