利用 WinSCP 在命令行中进行 WebDAV 文件传输

环境要求

  • Windows
  • WinSCP

TL;DR

使用如下命令即可。

WinSCP.com /command "open dav://<username>:<password>@<host>/" "put <local_file_path> <remote_file_path>" "exit"

其中:

  • WinSCP.com 为 WinSCP 命令行工具,位于 WinSCP 安装目录下(与 WinSCP.exe 在同一目录)
  • dav:// 为协议头,对应基于 HTTP 的WebDAV,如需使用 HTTPS,则需要换成 davs://
  • <username>:<password> 为认证信息
  • <host> 为 WebDAV 服务器的主机名
  • <local_file_path> 为本地文件路径
  • <remote_file_path> 为 WebDAV 上的文件路径

执行脚本的命令行

通过命令行传入要执行的指令的方法如下:

WinSCP.com /command "<command1>" "<command2>" ...

或者将要执行的指令写入一个脚本文件中(以 D:\script.txt 为例),然后执行以下命令:

WinSCP.com /script=D:\script.txt

参考资料

下面先列出一些相关的文档或资料,供参考。如有本文未能描述的,或与本文描述不符的情况,请以文档为准。

详解

要完成上传文件的动作,至少需要如下三条脚本指令。

open dav://username:password@dav.example.com/initial_folder/
put D:\test.txt /path/to/file/test.txt
exit

open - 连接到 WebDAV 服务器

通过 open 指令要求 WinSCP 连接到指定服务器,指定该特定服务器的字符串称为Session URL

open 指令语法:

open <session_url>
open <site>

Session URL 格式为:

<协议>://[<用户名>[:<密码>]@]<主机名>[:端口号]/<起始路径>

针对本文讨论的主题,上述格式可选值或填写方式如下。

  • 协议:dav 表示无加密 (HTTP) 的 WebDAV,davs 表示有加密 (SSL/TLS) 的 WebDAV。
  • 用户名/密码:如果 WebDAV服务器要求通过用户名(和密码)进行身份验证,需要填写。其中 @ 为主机名与用户名/密码之间的分隔符,: 为用户名与密码之间的分隔符。(对于用户名 / 密码中包含 @: 等特殊符号造成的问题,在此不赘述转义方式,下文会描述一个简便并且避开该问题的生成 Session URL 的方法)
  • 主机名:WebDAV 服务器的 IP 地址或 域名。
  • 端口号:HTTP 默认端口为 80,HTTPS 默认端口为 443。如使用默认端口可以不填写。
  • 起始路径:连接服务器后,自动切换工作目录到该起始路径。

另外也可以使用在图形界面中保存的 Site 的名称代替 Session URL。

put - 上传文件

通过 put 指令要求 WinSCP 将本地文件上传到远程服务器的指定位置。

put 指令语法:

put <file> [ [ <file2> ... ] <directory>/[ <newname> ] ]

示例:

  1. 将本地的 D:ab.txt 上传为远程服务器上的 /dir/c.txt
put D:\a\b.txt /dir/c.txt
  1. 将本地的 D:ab.txt 上传到远程服务器上的 /dir/ 目录(即不改变文件名,上传为 /dir/b.txt)
put D:\a\b.txt /dir/

exit - 退出命令行

exit 指令会关闭所有连接,并退出命令行。如果需要关闭连接但保留命令行,可以使用 close 指令

Tips

利用 WinSCP 图形界面生成 Session URL

通过 WinSCP 图形界面连接到 WebDAV 服务器后,进行如下操作即可得到 Session URL。

  1. 菜单栏 - Session - Generate Session URL/Code...
  2. 切换到 URL 标签页,勾选需要在 URL 中携带的信息
  3. 点击 Copy to clipboard 复制 URL 到剪贴板

利用交互式命令行测试脚本

不带参数运行 WinSCP.com 可以进入交互式命令行。可以对上述命令进行分步测试。

> WinSCP.com
winscp> open dav://username:password@dav.example.com/initial_folder/
Connecting to host...
Authenticating...
Authenticated.
Starting the session...
Session started.
Active session: [1] username@dav.example.com

...
本文采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。
本文作者:KeNorizon
本文链接:https://blog.kenorizon.cn/solution/winscp-command-line-webdav.html

评论

暂无

添加新评论