如何使用批处理脚本从.properties文件读取

我有一个要求,我想从一个.properties文件中读取值

我的属性文件test.properties内容

 file=jaguar8 extension=txt path=c:\Program Files\AC 

从上面的文件中,我需要获取jaguar或任何事后=

请帮帮我。 谢谢

尝试这个

 echo off setlocal FOR /F "tokens=3,* delims=.=" %%G IN (test.properties) DO ( set %%G=%%H ) rem now use below vars if "%%G"=="file" set lfile=%%H if "%%G"=="path" set lpath=%%H if "%%G"=="extension" set lextention=%%H echo %path% endlocal 
 For /F "tokens=1* delims==" %%A IN (test.properties) DO ( IF "%%A"=="file" set file=%%B ) echo "%file%" 

希望这可以帮助

 @echo off FOR /F "tokens=1,2 delims==" %%G IN (test.properties) DO (set %%G=%%H) echo %file% echo %extension% echo %path% 

请注意,%% H之后没有空格。 否则,这将导致一个空格被追加到文件路径中,例如,当属性文件的变量被用作文件路径的一部分时,将导致文件未找到错误。因此,导致数小时的结果!

支持评论(#风格)的解决方案。 请参阅代码中的注释以解释。

test.properties:

 # some comment with = char, empty line below #invalid.property=1 some.property=2 some.property=3 # not sure if this is supported by .properties syntax text=asd=f 

属性 – read.bat:

 @echo off rem eol stops comments from being parsed rem otherwise split lines at the = char into two tokens for /F "eol=# delims== tokens=1,*" %%a in (test.properties) do ( rem proper lines have both a and b set rem if okay, assign property to some kind of namespace rem so some.property becomes test.some.property in batch-land if NOT "%%a"=="" if NOT "%%b"=="" set test.%%a=%%b ) rem debug namespace test. set test. rem do something useful with your vars rem cleanup namespace test. rem nul redirection stops error output if no test. var is set for /F "tokens=1 delims==" %%v in ('set test. 2^>nul') do ( set %%v= ) 

set test.输出set test. (往上看):

 test.some.property=3 test.text=asd=f 

最重要的部分是:

  • for -loop与eoldelims选项和
  • if选中变量%%a%%b

你在变量和它的值所做的事情当然取决于你 – 分配一些前缀变量只是一个例子。 命名空间的方法避免了任何其他的全局变量被覆盖。 例如,如果你有像在你的.properties文件中定义的appdata东西。

我使用这个摆脱了一个额外的config.bat,而是使用一个.properties文件的Java应用程序和一些支持批处理文件。

适用于我,但肯定不是每一个边缘的情况下,所以改进欢迎!

我知道这是古老的帖子,但我想扩大toschug的伟大的答案。

如果.properties文件中的路径被定义为%〜dp0或其他任何需要在使用前首先展开的变量,我建议按如下方式进行:

在.properties文件中:

 path=%~dp0 

在批处理文件中,您可以按以下方式使用它(代码将在两个之间用于定义一个<=>清理):

 if "!test.path!" NEQ "" ( echo Not expanded path: !test.path! call :expand !test.path! test.path ) echo test.path expanded: !test.path! pause :expand SET "%~2=%~1" GOTO :EOF 

不要忘记使用(在批处理文件的开始处):

 SETLOCAL ENABLEDELAYEDEXPANSION