我有一个包含不同参数的文件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脚本中编写此代码以获取变量的正确值?
答案 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
之前),这将设置正确的变量(非本地)。