Сводка:
В командной строке (в Windows Server 2003 R2) я набираю:
> SET password=a^b
> ECHO %password%
И результат «ab».Куда пошла эта чертова карета (^)?Затем я попытался «убежать» с помощью ^^, `^,% ^, ^^^, и ни один из них не работал, чтобы когда-либо пройти через каретку к команде echo.Этот пакетный файл находится в середине.Таким образом, я не могу ни изменить пароль исходной системы, чтобы избежать использования каретки, ни изменить пароль целевой системы, чтобы не синхронизировать его с исходной системой.
Подробности:
Я искал Google, а затем ТАК.И хотя у меня теперь есть несколько советов о том, как лучше спроектировать мой кровавый пакетный файл Windows, моя проблема остается.
У меня есть пакетный файл, называемый run.bat, который состоит из серии операторов SET, настраивающихконтекст для запуска приложения командной строки Java.После «cd» в нужную папку, в командной строке в командной строке (в Windows Server 2003 R2) я набираю:
> run the_name the_pass^word
Когда я смотрю на вывод, отраженный в командной строке, я вижу"java ... config.user_name = the_name config.password = the_password", где ... - это набор параметров и библиотечный шум, не относящийся к этой проблеме.Кровавая карета (^) исчезла.
Я испробовал все возможные стратегии побега, пытаясь заставить карету появиться.Я не смог найти ничего, что могло бы привести к появлению каретки ... за исключением того, что я заключил пароль в кавычки, как я набрал:
> run the_name "the_pass^word"
... и тогда полученная командная строка выглядит так:
java...config.user_name=the_name config.password="the_pass^word"
т.е. я получаю символ вставки, но теперь в содержимом строки появляются кавычки ... что, естественно, не работает для приложения, которому они передаются.
У кого-нибудь есть очевидный совет или трюк, который я пропустил, чтобы иметь то, что вводится в качестве параметров в командной строке, передаваемых через UNTOUCHED для моего внутреннего использования?Фактически это значение прибывает в переменную пакетного файла% 2.Но к тому времени, когда я впервые увидел содержимое% 2, оно было «разморозлено».
UGH, я не фанат пакетных файлов Windows.
Обновление:
Большое спасибо ответу Джошуа МакКиннона.Я выбрал его в качестве ответа, поскольку это решило мою непосредственную проблему.Однако я хотел бы более подробно остановиться на решениях (да, во множественном числе).
- Нет необходимости использовать любую форму SetLocal / EndLocal
- Необходимо использовать синтаксис стиля% ~ 1 -не найдена форма синтаксиса% 1, которая работала для сохранения каретки
- Решение: без кавычек используйте 4 последовательных каретки (например: используйте пароль ^^^^ word для создания пароля ^ word)
- Решение: в кавычках используйте 2 последовательных символа (например, используйте «pass ^^ word» для создания pass ^ word)
В пакетном файле «run.bat» используйте синтаксис% ~ 1 какв:
java MyClass username=%~1 password=%~2
... и затем в командной строке введите:
> run mr_clean puke^^^^boy
или
> run mr_clean "puke^^boy"
, что приведет к выполнению финалаВыражение выглядит так:
java MyClass username=mr_clean password=puke^boy
Надеюсь, это поможет другим сэкономить время.Я закончил на 6 часов касательных, пытаясь выследить эту особенность (больше похоже на идиот-синхронность).