Пакет: чтение значений из файла .properties, которые содержат специальные символы - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть два файла.

values.properties

user=username
password=Password1234!

mybatch.bat

SETLOCAL EnableDelayedExpansion
For /F "tokens=1,2 delims==" %%A IN (path/values.properties) DO (
    IF "%%A"=="user" set user=%%B
    IF "%%A"=="password" set password=%%B
    )

В пакетном файле значение пароля:

Password1234

Так что, в основном, "!"исчезают.Я хочу, чтобы "пароль" хранил любое значение, независимо от того, какие специальные символы будут содержать.Как я могу это сделать?Я пытался избежать "!"добавить "пароль = ^^ %% B".Не работал.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Проблема заключается в том, что вы используете for ссылку на переменную %%A при включенном отложенном расширении , которое потребляет восклицательный знак.

Поэтому просто отключите отложенное расширение и вашкод работает.

Позвольте мне рекомендовать использовать синтаксис set в кавычках set "user=%%B", чтобы избежать проблем со специальными символами.

0 голосов
/ 11 декабря 2018

Простите.Я не могу удержаться от соблазна опубликовать этот ответ ...

Предположим, у вас есть числовая переменная, которая может иметь значения 10, 25 и 50, и вы хотите добавить ее в общую переменную.Вы можете сделать это следующим образом:

if %num% equ 10 set /A total+=10
if %num% equ 25 set /A total+=25
if %num% equ 50 set /A total+=50

... или вы можете сделать это следующим образом:

set /A total+=num

Какой вариант вы бы предпочли?


Проблема с вашим кодом заключается в том, что вы активируете отложенное расширение в момент назначение выполнено.Просто удалите его и, если вам это нужно, просто включите его позже:

SETLOCAL
For /F "delims=" %%A IN (path/values.properties) DO set "%%A"

SETLOCAL EnableDelayedExpansion
echo Password=!password!

Другие изменения в коде объясняются в первой части этого ответа.Кавычки вокруг %%A используются для защиты других специальных символов, таких как & или >.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...