Windows shell:从文件中获取参数值

时间:2015-08-19 11:35:49

标签: batch-file

我有一个包含不同参数的文件C:\parameters.txt,例如:

env_user=username123
env_pw=password123
env_url=example.com

现在我创建了一个.cmd文件,需要获取这些值并将它们放在变量中,例如:

SET var_user=<Here I need 'username123'>
SET var_pw=<Here I need 'password123'>
SET var_url=<Here I need 'example.com'>

如何在我的cmd脚本中编写此代码以获取变量的正确值?

3 个答案:

答案 0 :(得分:2)

您需要为=字符设置分隔符,以便将=之前/之后的字词分开。除此之外,您需要一个数组到set每个参数。你可以这样做:

@echo off
setlocal enabledelayedexpansion
set increment=0
for /f "tokens=1* delims==" %%a in (C:\parameters.txt) do (
    set parameters_array[!increment!]=%%b
    set /a increment+=1
)
echo %parameters_array[0]%
echo %parameters_array[1]%
echo %parameters_array[2]%
pause >nul

请记住,数组始终从0开始。如果您希望数组从1开始,则可以更改为set increment=1

答案 1 :(得分:0)

只是对暗牙解决方案的一个轻微替代方案,因为您的parameters.txt文件的内容已经采用variable=value的格式,您可以

@echo off
setlocal

for /f "usebackq delims=" %%I in ("c:\parameters.txt") do set "%%I"

rem // display env_* variables
set env_
pause

usebackq选项允许您引用文件名,如果您将c:\parameters.txt移动到包含空格,符号或其他特技字符的位置,则可能需要该文件名。使用for /f阅读文本文件的内容时,这是一个很好的习惯。

此外,如果您不需要延迟扩展,最好不要使用延迟扩展,因为延迟扩展有时会破坏包含感叹号的值 - 这种情况在处理密码时是合理可行的。 / p>

答案 2 :(得分:0)

由于不同的输入,我找到了解决方案。

@echo off  
For /F "tokens=1* delims==" %%A IN (C:\parameters.txt) DO (
    IF "%%A"=="env_user" set var_user=%%B
    IF "%%A"=="env_pw" set var_pw=%%B
    IF "%%A"=="env_url" set var_url=%%B
    )

一旦找到特定代码名称(=中的parameters.txt之前),这将设置正确的变量(非本地)。