Как развернуть текущий удаленный путь в настраиваемой командной строке в WinSCP? - PullRequest
0 голосов
/ 12 ноября 2018

Я попытался создать пользовательскую команду, которая разархивирует выбранный файл по пути, определенному пользователем, но со значением по умолчанию для текущего пути и текущего имени архива на удаленном сервере, используя эту команду, но приглашение только что выдало мне пустое значение,В чем ошибка?

unzip "!" -d "!?&Extraction Path:?!/!!"

Заранее спасибо!

1 Ответ

0 голосов
/ 12 ноября 2018

Это невозможно. На самом деле есть запрос функции для этой функции:
Ошибка 743 - Разрешить шаблоны в ответе на приглашение по умолчанию в пользовательских командах .

Хотя даже это означало поддержку только статических (не файловых) шаблонов, таких как !/, но не шаблонов файлов, таких как !.


Если это поможет, в расширениях WinSCP можно использовать не файловые шаблоны, такие как !/ (но не шаблоны файлов, такие как !) по умолчанию prompt / option ответ.

Файл расширения может выглядеть так:

@name     Unzip...
@side     Remote
@command  unzip "!" -d "%ExtractionPath%"
@option   ExtractionPath -run textbox "Extraction path:" "!/"

Просто сохраните приведенный выше скрипт в текстовый файл и установите его в WinSCP .


Еще одна вещь, которую вы можете сделать, это добавить флажок, который заставит WinSCP добавить имя архива (без расширения) к пути, с некоторым умным использованием конструкций оболочки (bash). Таким образом, вы можете снять флажок и добавить пользовательскую подпапку в целевой путь вручную, если вы не хотите использовать имя архива для имени подпапки.

@name     Unzip...
@side     Remote
@command  unzip "!" -d "%ExtractionPath%`[[ '%AddName%' = '1' ]] && AN=! && echo ${AN%.*}`"
@option   ExtractionPath -run textbox "Extraction path:" "!/"
@option   AddName -run checkbox "Add file name to the extraction path" "1" "1"

enter image description here


Еще одна альтернатива - использовать свой собственный заполнитель для имени архива (например, ARCHIVENAME), которое будет заменено реальным именем (без расширения) при выполнении команды. Затем, если вы не хотите использовать имя архива для имени подпапки, вы заменяете ARCHIVENAME на пользовательское имя.

@name     Unzip...
@side     Remote
@command  unzip "!" -d "`EP=%ExtractionPath%;AN=!;AN=${AN%.*};echo ${EP/ARCHIVENAME/$AN}`"
@option   ExtractionPath -run textbox "Extraction path:" "!/ARCHIVENAME"

enter image description here

...