首页 > 解决方案 > 如何在批处理编程中从属性文件中读取值

问题描述

我有一个属性文件,其中包含格式为

variable_one = value_one
variable_two = value_two
.
.
.
.



. and so on
文件名为 testing.properties ,位于批处理脚本的同一目录中

For /F "tokens=1* delims==" "variable_one", "variable_two" IN (testing.properties) DO (
	IF "variable_one"=="variable_one" set local_variable_one=%%B
  IF "variable_two"=="variable_two" set local_variable_two=%%C
	)
	
echo "%local_variable%"

pause

标签: batch-fileproperties

解决方案


属性文件是否真的包含=?

像这样的东西将读取所有属性并仅显示它们的值:

@echo off

for /f "tokens=2 delims== " %%i in (testing.properties) do echo %%i
pause

这将显示属性名称和值:

@echo off

for /f "tokens=1,* delims== " %%i in (testing.properties) do echo Property: %%i Value: %%j
pause

如果您真的想将属性设置为变量(用作可读变量)。

@echo off
setlocal enabledelayedexpansion
for /f "tokens=1,* delims== " %%i in (testing.properties) do (
    set property=%%i
    set value=%%j
    echo !property! !value!
)
pause

比较值然后设置它们本身就是另一项任务。你在这里举一个例子,所以举一个真实的例子,我们可以从那里开始工作。例如。我们可以将属性名称值设置为可变名称,而无需手动输入:

@echo off
setlocal enabledelayedexpansion
for /f "tokens=1,* delims== " %%i in (testing.properties) do (
    set %%i=%%j
    echo Property: %%i has Value: !%%i!
)
pause

甚至在字符串中添加一些东西:

@echo off
setlocal enabledelayedexpansion
for /f "tokens=1,* delims== " %%i in (testing.properties) do (
    set local_%%i=%%j
    echo Property: %%i has value !local_%%i! set as Variable local_%%i
)
pause

最后,为您的变量提供唯一名称将取决于一些搜索条件,您可能可以使用属性中的标识符。例如findstr,对您的属性的一部分执行 a on 操作,或者简单地匹配一个数值或属性中唯一的任何内容。


推荐阅读