首页 > 解决方案 > 如何在 WinSCP 中的自定义命令提示符中扩展到当前远程路径?

问题描述

我尝试创建一个自定义命令,将所选文件解压缩到用户定义的路径,但使用此命令在远程服务器中使用当前路径和当前存档名称的默认值,但提示只是给了我一个空值。有什么错误?

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

提前致谢!

标签: winscp

解决方案


这是不可能的。这个功能实际上有一个功能请求:
Bug 743 – Allow patterns in default prompt answer in custom commands

尽管即使它意味着只支持静态(非文件)模式!/,但不支持文件模式,如!.


如果有帮助,在WinSCP extensions中,可以在默认提示/选项答案中使用非文件模式,如!/(但不是文件模式,如)。!

扩展文件可能如下所示:

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

只需将上述脚本存储到文本文件并将其安装到 WinSCP 即可


您可以做的另一件事是添加一个复选框,该复选框将使 WinSCP 将存档名称(不带扩展名)添加到路径中,并巧妙地使用 shell (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"

在此处输入图像描述


另一种选择是使用您自己的占位符作为存档名称(例如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"

在此处输入图像描述


推荐阅读