Plink cmd.exe mkdir с пробелом не работает

Я использую plink на рабочем столе Windows 7, чтобы создать папку на сервере Windows 2008. Сервер использует pragmaSSH, чтобы разрешить SSH-соединение, и там все работает нормально.

В каталоге, который я хочу создать, есть место, и именно здесь начинается моя проблема.

У меня есть базовая команда plink, которая работает так

plink.exe -i privatekey.ppk user@server cmd.exe /c mkdir "c:\asdfasdf"

но изменить эту команду на это не удается. так что пространство наверняка моя проблема.

plink.exe -i privatekey.ppk user@server cmd.exe /c mkdir "c:\asdf asdf"

Я пытался избежать этого всеми возможными способами, которые я мог придумать, и всегда сталкивался с одной и той же проблемой с пространством.

Хорошо, после 60000 попыток я понял, как передать кавычки на сервер.

plink.exe -i privatekey.ppk useryserver mkdir \\"""c:\asf asf\\"""

и это отправило 1 кавычку с каждой стороны и выполнило команду как mkdir "c:\asf asf"


person johnnydeluxable    schedule 18.07.2011    source источник
comment
Какие все возможные способы вы можете придумать?   -  person Joey    schedule 19.07.2011


Ответы (1)


Кавычек достаточно, чтобы избежать команды для plink, которая недостаточно умна, чтобы снова цитировать с другой стороны (разумно, поскольку она не может знать, какая странная оболочка может там работать).

Итак, вам нужно следующее:

plink.exe -i privatekey.ppk user@server cmd.exe /c mkdir "\"c:\asdf asdf\""
person Joey    schedule 19.07.2011
comment
это также дает ту же проблему, он все еще пытается создать только папку asdf. Подкаталог или файл c:\asdf уже существует. При обработке произошла ошибка: c:\asdf. Подкаталог или файл asdf уже существует. При обработке произошла ошибка: asdf. - person johnnydeluxable; 19.07.2011
comment
@johnnydeluxable: Возможно, в разных ситуациях следует применять разные способы выхода из кавычек. Один такой же, как в ответе @Joey, другие: "^"c:\asdf asdf^"", """c:\asdf asdf""". - person Andriy M; 19.07.2011
comment
Также возможно, что вся команда mkdir (включая аргумент) должна быть заключена в двойные кавычки, с экранированием двойных кавычек вокруг имени папки. - person Andriy M; 19.07.2011
comment
я пробовал с, \, ^ с mkdir в кавычках и вне кавычек, все равно plink всегда удаляет слишком много кавычек, и всегда трис просто делает c:\asdf независимо от того, как я его передаю, я получаю тот же результат, как если бы я не ставил никаких кавычек любого рода. - person johnnydeluxable; 19.07.2011
comment
Я попробовал с хостом FreeBSD на другом конце, и \" сработало. Причина, по которой я считаю, что это правильный способ избежать кавычек, заключается в том, что в Windows программы отвечают за синтаксический анализ своей собственной командной строки. Это включает в себя такие вещи, как цитаты. Следовательно, первый уровень кавычек будет удален самой plink, которая затем передаст то, что осталось, другой системе (с удаленным `` в этом случае). Насколько я вижу, цитирование оболочки не требуется нигде, поскольку где-то нет оболочки, которая удалит кавычки. Если только я не упускаю из виду что-то здесь. - person Joey; 19.07.2011