У меня есть два пакетных файла, которые используются для запуска большой сборки C ++, первый запускает процессы, создает каталоги и выясняет, что отправить во второй скрипт. Если определенная информация представлена в первом сценарии, у меня есть подпрограмма, которая выскакивает окно и запрашивает пароль. Это передается второму сценарию путем вызова второго сценария, подобного этому
call script2.bat -pw:myPassword
где myPassword - это то, что ввел пользователь.
Сейчас я тестировал этот скрипт, и один из моих пользовательских паролей содержит точку с запятой, поэтому мы получаем это
call script2.bat -pw:my;Password
Я нашел, заключив в кавычки, я могу получить это во втором скрипте ОК
call script2.bat -pw:"my;Password"
Однако, разбор командной строки прерывается, когда я пытаюсь сделать это
for /F "tokens=1,2 delims=:" %%a in ( "%1" ) DO SET switch=%%a&value=%%b
если я echo %1
это показывает вот так
-pw:"my;Password"
Но с включенным эхо при запуске скрипта я вижу
for /F "tokens=1,2 delims=:" %%a in ( "-pw:"my Password"" ) DO SET switch=%%a&value=%%b
и обрабатывается как switch=-pw
и value="my
В конечном итоге мне нужно, чтобы значение содержало мой пароль; чтобы я мог передать его другой программе
Любые идеи о том, как заставить это разобрать правильно
Вот 2 пакетных файла, которые решают проблему:
a.bat:
echo on
call b.bat -pw:eatme
call b.bat -pw:eat;me
call b.bat -pw:"eat;me"
call "b.bat -pw:\"eat;me\""
b.bat:
echo on
echo %1
for /F "tokens=1,2 delims=: " %%a in ( "%1" ) DO SET switch=%%a&SET value=%%b
echo switch=%switch%
echo value=%value%