环境要求
- 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> ] ]
示例:
- 将本地的 D:ab.txt 上传为远程服务器上的 /dir/c.txt
put D:\a\b.txt /dir/c.txt
- 将本地的 D:ab.txt 上传到远程服务器上的 /dir/ 目录(即不改变文件名,上传为 /dir/b.txt)
put D:\a\b.txt /dir/
exit - 退出命令行
exit 指令会关闭所有连接,并退出命令行。如果需要关闭连接但保留命令行,可以使用 close 指令
Tips
利用 WinSCP 图形界面生成 Session URL
通过 WinSCP 图形界面连接到 WebDAV 服务器后,进行如下操作即可得到 Session URL。
- 菜单栏 - Session - Generate Session URL/Code...
- 切换到 URL 标签页,勾选需要在 URL 中携带的信息
- 点击 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://kenorizon.cn/solution/winscp-command-line-webdav.html