Rozwiązanie z obsługą komentarzy (styl #). Zobacz komentarze w kodzie dla wyjaśnienia.
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
Właściwości-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=
)
wyjściowy set test.
(patrz wyżej):
test.some.property=3
test.text=asd=f
najważniejsze części są:
- z
for
-loop z opcją eol
i delims
i
- z
if
-Sprawdza że obie zmienne %%a
i %%b
są ustawione.
To, co robisz w for
-zapasowaniu ze zmienną i jej wartością zależy od Ciebie - przypisanie do niektórych zmiennych z prefiksem było tylko przykładem. Metoda odwzorowywania nazw pozwala uniknąć nadpisania dowolnej innej zmiennej globalnej. Na przykład, jeśli w pliku .properties zdefiniowano coś takiego, jak appdata
.
Używam tego, aby pozbyć się dodatkowego pliku config.bat i zamiast tego używać jednego pliku .properties zarówno dla aplikacji java, jak i niektórych plików wsadowych obsługi.
Działa dla mnie, ale z pewnością nie każdy przypadek skrajny jest tutaj objęty, więc poprawki mile widziane!
nie działa dla mnie! –