Как читать из файла .properties с помощью пакета script

У меня есть требование, когда я хотел бы читать значения из файла .properties

мой файл свойств test.properties content

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

Из вышеприведенного файла мне нужно получить jaguar или что-нибудь после =

Пожалуйста, помогите мне. Благодаря

Ответ 1

Попробуйте это

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

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

echo "%file%"

надеюсь, что это может помочь

Ответ 3

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

Обратите внимание, что после %% H нет пробела. Кроме того, это приводит к добавлению пространства, например к файловым путям, и приведет к ошибкам файла, которые не были найдены, когда переменные из файлов свойств используются как часть пути к файлу. В течение многих часов из-за этого!

Ответ 4

Решение с поддержкой комментариев (стиль #). См. Комментарии в коде для пояснения.

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. (см. выше):

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

Наиболее важными частями являются:

  • for -loop с параметрами eol и delims и
  • if - указывает, что установлены как переменные %%a, так и %%b.

То, что вы делаете в for -loop с переменной и ее значением, конечно, зависит от вас - простое указание на некоторые префиксы. Метод namespacing позволяет избежать переопределения любой другой глобальной переменной. Например, если у вас есть что-то вроде appdata, определенное в вашем файле .properties.

Я использую это, чтобы избавиться от дополнительного config.bat и вместо этого использовать один файл .properties для приложения java и некоторых пакетных файлов поддержки.

Работает для меня, но, конечно, не каждый кросс-код рассматривается здесь, поэтому улучшения приветствуются!

Ответ 5

Я знаю, что это древний пост, но я хотел бы расширить этот ответ.

Если путь в файле .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