Проблема в том, что файлы groovy.bat
и startgroovy.bat
содержат плохой код пакета.
startgroovy.bat
включает отложенное расширение, но не использует его!
Параметры передаются из groovy.bat
в startgroovy.bat
с помощью %*
в строке.
"%DIRNAME%\startGroovy.bat" "%DIRNAME%" groovy.ui.GroovyMain %*
Там будут удалены первые каретки, но сколько не определено, потому что неясно, включено отложенное расширение или нет.
В startgroovy.bat
отложенное расширение включено, а аргументы хранятся в таких строках, как set CP=%~2
.
Там будут удалены следующие символы.
Но когда аргументы доходят до блока:
rem escape minus (-d), quotes (-q), star (-s).
set _ARGS=%*
if not defined _ARGS goto execute
set _ARGS=%_ARGS:-=-d%
set _ARGS=%_ARGS:"=-q%
...
Вся надежда потеряна, здесь невозможно сохранить восклицательный знак
Если вы хотите исправить это, вам нужно заменить все %ARGS:...%
выражения на - !ARGS:...!
.
set _ARGS=!_ARGS:-=-d!
set _ARGS=!_ARGS:"=-q!
Но функция :win9xME_args_loop
тоже не работает.
:win9xME_args_loop
rem split args by spaces into first and rest
for /f "tokens=1,*" %%i in (!_ARGS!) do call :get_arg "%%i" "%%j"
goto process_arg
call ... "%%i" "%%j"
не будет работать с каретками / восклицательными знаками, это должно быть изменено на что-то вроде:
for /f "tokens=1,*" %%i in ("!_ARGS!") do (
set "_ARG=!_ARG! %%~i"
Но мой вывод таков: не пытайтесь использовать специальные символы в вашем пароле.
Необходима полная перезапись Groovy командных файлов, в настоящее время файлы являются хорошим примером анти-паттерна