Как уже говорил @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.