Как читать из файла .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