Una solución con soporte para comentarios (estilo #). Ver los comentarios en el código para una explicación.
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
propiedades-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=
)
salida de set test.
(ver arriba):
test.some.property=3
test.text=asd=f
Las partes más importantes son:
- los
for
-loop con la opción eol
y delims
y
- los
if
se utiliza para comprobar que ambas variables %%a
y %%b
están ajustadas.
Lo que haces en el for
-loop con la variable y su valor depende de ti - la asignación a algunas variables prefijadas fue solo un ejemplo. El enfoque de espacio de nombres evita que cualquier otra variable global quede anulada. Por ejemplo, si tiene algo como appdata
definido en su archivo .properties.
Estoy usando esto para deshacerme de un config.bat adicional y en su lugar usar un archivo .properties tanto para la aplicación Java como para algunos archivos por lotes compatibles.
Funciona para mí, pero ciertamente no todos los casos extremos están cubiertos aquí, ¡así que las mejoras son bienvenidas!
no funciona para mí! –