2011-10-10 10 views

Odpowiedz

7

Spróbuj

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 
+2

nie działa dla mnie! –

19
For /F "tokens=1* delims==" %%A IN (test.properties) DO (
    IF "%%A"=="file" set file=%%B 
) 

echo "%file%" 

nadzieja ta może pomóc

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

pamiętać, że nie ma miejsca po %% H. W przeciwnym razie powoduje to dodanie spacji, np. Do ścieżek do plików i spowoduje błędy nie znalezione w pliku, gdy zmienne z plików właściwości są używane jako część ścieżki do pliku. Z tego powodu przez wiele godzin lamano!

+0

Nie będzie jednak brać pod uwagę komentarzy; +1 Dla rozwiązania. –

4

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!

0

Wiem, że to stara poczta, ale chciałbym rozwinąć wspaniałą odpowiedź toschug.

Jeśli ścieżka w.Plik właściwości byłoby zdefiniowane jako% ~ DP0 lub jakiejkolwiek innej zmiennej, która musi być najpierw rozszerzona przed użyciem go, polecam robi to w następujący sposób:

W pliku .properties:

path=%~dp0 

w partii plik można następnie używać go w następujący sposób (kod ma być stosowany między nimi do (ów) określającego jeden < => porządki jeden):

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 

nie zapomnij użyć (na początku plik wsadowy):

SETLOCAL ENABLEDELAYEDEXPANSION 
Powiązane problemy