Как передать пароль (содержащий специальные символы) в качестве аргумента командной строки?

Вопрос:У меня есть развертывание script, которому я должен передать пароль LDAP в качестве cmd-параметра. действительный пароль: foo$ser"ver 1 (содержит три пробела: в начале, перед 1 и после 1) например ...bin>deployment.bat LDAPPassword= foo$ser"ver 1 Примечание. В пароле есть пробелы, как показано в начале. deployment.bat вызывает класс, которому передается вышеприведенный параметр в качестве аргумента. Проблема в том,

Вопрос:

У меня есть развертывание script, которому я должен передать пароль LDAP в качестве cmd-параметра.

действительный пароль:  foo$ser»ver\ 1  (содержит три пробела: в начале, перед 1 и после 1)

например

…bin>deployment.bat LDAPPassword= foo$ser»ver\ 1

Примечание. В пароле есть пробелы, как показано в начале.

deployment.bat вызывает класс, которому передается вышеприведенный параметр в качестве аргумента.
Проблема в том, что класс получает 2 различных аргумента:

args[0]= foo$ser»ver\ //The space after \ is omitted args[1]=1 //The space before and after 1 is omitted

Как передать этот пароль, чтобы он был получен как одна строка?

Я уже пробовал указать пароль как

…bin>deployment.bat LDAPPassword=» foo$ser»ver\ 1 »

однако это не сработает.

Лучший ответ:

Вы не можете избежать своего пароля в любом случае.
Поскольку некоторые комбинации с кавычками вместе с пробелами не могут быть помещены в один параметр.

Подобно этому » (<space><quote><space>), даже если вы добавляете некоторые кавычки, это невозможно, даже если вы указываете пробелы и сами кавычки.

myBat » myBat » » » myBat ^ » myBat ^»^ ^»^ ^»

Лучше всего удвоить все кавычки внутри вашего пароля и заключить ваш пароль в кавычки.
Тогда вы можете использовать все остальные символы без проблем.

deployment.bat “foo$ser ” “ver1”

И в deploy.bat

@echo off setlocal DisableDelayedExpansion set «pwd=%~1» setlocal EnableDelayedExpansion set «pwd=!pwd:»»=»!» echo pwd=’!pwd!’

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

Для доступа к параметрам командной строки вы также можете посмотреть
SO: Как получить даже самые странные параметры командной строки?

Ответ №1″ foo$ser»ver 1 »

Чтобы процитировать полную строку, вам нужно избежать цитаты, чтобы она не рассматривалась как конечная цитата.

И в тех случаях, когда цитата уже имеет префикс обратной косой черты, вам также придется скрывать обратную косую черту. Итак, пароль как

this isa»test

следует записать как

«thisisa\»test»

Для получения дополнительной информации this является “обычным” способом анализа аргументов в Windows.

EDITED – просто для документирования тестов. Использование этого командного файла (test.cmd)

@echo off cls echo(——————————————— echo [%1][%2][%3][%4][%5][%6][%7][%8][%9] echo(——————————————— cmdline.exe %1 %2 %3 %4 %5 %6 %7 %8 %9 echo(——————————————— cmdline.exe %* echo(——————————————— java CmdLine %1 %2 %3 %4 %5 %6 %7 %8 %9 echo(——————————————— java CmdLine %* echo(———————————————

где cmdline.exe получается из этого c-кода

#include «windows.h» #include «stdio.h» void main(int argc, char **argv){ int i; printf(«cmdline:[%s]rnrn»,GetCommandLine()); for(i = 0; i < argc ; i++) printf(«arg_%03d:[%s]rn»,i,argv[i]); };

и CmdLine.java

public class CmdLine { public static void main (String[] args) { int i = 0; for (String s: args) { System.out.println(String.format(«arg_%03d:[%s]»,++i,s)); } } }

Запуск test.cmd » foo$ser»ver 1 » результатов

——————————————— [» foo$ser»ver][1][«][][][][][][] ——————————————— cmdline:[cmdline.exe » foo$ser»ver 1 » ] arg_000:[cmdline.exe] arg_001:[ foo$ser»ver 1 ] ——————————————— cmdline:[cmdline.exe » foo$ser»ver 1 «] arg_000:[cmdline.exe] arg_001:[ foo$ser»ver 1 ] ——————————————— arg_001:[ foo$ser»ver 1 ] ——————————————— arg_001:[ foo$ser»ver 1 ] ———————————————

Оцените статью
Добавить комментарий