是否有与curl/wget功能反向的Windows命令行工具可上传目录到WebDAV服务器?
符合需求的Windows命令行WebDAV目录上传工具推荐
以下工具均支持单行命令调用,可直接嵌入Windows批处理脚本使用:
1. Rclone(最推荐,适配性强)
Rclone是开源的云存储命令行同步工具,原生支持WebDAV协议,无需提前配置存储远程端,可直接通过传参实现单行目录上传:
rclone copy C:\本地要上传的目录树路径 :webdav:远程目标路径 --webdav-url=https://你的WebDAV服务器地址 --webdav-user=你的账号 --webdav-pass=你的密码
- 支持增量上传、断点续传,可额外加
--delete参数实现两端目录完全同步 - 直接下载Windows二进制文件即可使用,无需安装
- 如果担心批处理内明文泄露密码,可先通过
rclone obscure 你的明文密码生成加密串填入密码参数位置
2. WinSCP 命令行模式
WinSCP的命令行版本原生支持WebDAV,也可实现单行调用:
winscp.com /command "open davs://你的账号:你的密码@你的WebDAV服务器地址/" "synchronize remote C:\本地要上传的目录树路径 /远程目标路径" "exit"
- 完全兼容Windows环境,支持自动处理编码、权限问题
- 如果你的WebDAV服务走HTTP协议,把地址前缀的
davs://改成dav://即可
3. PowerShell 原生命令(无需额外安装工具)
如果不想安装第三方工具,可直接调用PowerShell内置接口封装成单行批处理命令,适配轻量化上传场景:
powershell -Command "$source = 'C:\本地目录路径'; $dest = 'https://WebDAV地址/目标路径/'; $user = '账号'; $pass = ConvertTo-SecureString '密码' -AsPlainText -Force; $cred = New-Object System.Management.Automation.PSCredential($user,$pass); Get-ChildItem $source -Recurse -File | ForEach-Object { $relPath = $_.FullName.Substring($source.Length); $webDavPath = $dest.TrimEnd('/') + $relPath.Replace('\','/'); $wc = New-Object System.Net.WebClient; $wc.Credentials = $cred; $wc.UploadFile($webDavPath, 'PUT', $_.FullName) }"
- 无需下载额外软件,缺点是大文件、多层目录场景下稳定性不如前两个工具
内容的提问来源于stack exchange,提问作者Walter Schrabmair
相关产品推荐
相关产品推荐

