Windows bat файл, динамически заменяющий% на %% в строке - PullRequest
0 голосов
/ 02 мая 2018

У меня есть ситуация, когда мы посылаем пароль пользователя в другую систему через bat-файл, и в большинстве случаев это прекрасно работает.

Однако, если мой пароль fAhCog1H!V2%xaH, который содержит символ %, у нас есть проблема.

Я знаю, что % нужно экранировать, удваивая его, %%, но я не уверен, как мы можем динамически добавить дополнительные %, чтобы они сохранялись как fAhCog1H!V2%xaH.

java -DTEST_INSTALL_DIR="C:/Program Files" com.xyz.test.installation set_password "sysadmin" "fAhCog1H!V2%xaH" || exit /b

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Я не уверен, как вы вызываете командный файл из вашего HTML, но скажем, что-то вроде:

call batchfile.cmd com.xyz.test.installation "sysadmin" "fAhCog1H!V2%xaH"

Тогда ваша партия будет работать лучше всего, если вы сделаете это:

java -DTEST_INSTALL_DIR="C:/Program Files" %1 set_password %2 %3 || exit /b

или включение delayedexpansion

@echo off
setlocal disabledelayedexpansion
set Inst=%1
set myuser=%2
set passw=%3
setlocal enabledelayedexpansion
java -DTEST_INSTALL_DIR="C:/Program Files" !Inst! set_password !myuser! !passw! || exit /b

Обратите внимание, что по-прежнему существуют ограничения на это, если любое из следующего в пароле, оно не будет работать. ^ или системные переменные (до раскрытия), такие как %appdata% или %cd% расширенные переменные по-прежнему будут работать, например !cd! или !appdata!

0 голосов
/ 02 мая 2018

Как уже говорил @Gerhard Barnard, отложенное расширение является хорошим решением для подобных проблем, так как содержание отложенных расширенных переменных больше не меняется.

Если у вас есть пароль в такой переменной, как pwd, тогда это safe , только парсер java-аргументов может дать сбой, если пароль содержит кавычки или обратную косую черту.

java ... set_password "sysadmin" "!pwd!" || exit /b

Основная проблема - ввести пароль в переменную pwd.
Но это более или менее просто, удвоить все проценты и удвоить все кавычки.
Во-первых, DisableDelayedExpansion - во избежание проблем с восклицательными знаками и знаками при вводе пароля pwd.

setlocal DisableDelayedExpansion
set "pwd=fAh""Cog1H!V2%%xaH"   

setlocal EnableDelayedExpansion
set "pwd=!pwd:\=\\!"  
set "pwd=!pwd:""=\"!"  This convert double double quotes to an escaped double quotes
java ... set_password "sysadmin" "!pwd!" || exit /b

Проблема двойных кавычек решается сначала удвоением всех кавычек, а затем преобразованием их для анализатора аргументов Java в \".

Вероятно, сам обратный слеш должен быть удвоен, чтобы предотвратить дальнейшие проблемы, не для пакета, а для анализатора аргументов Java.

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