在 Windows 上使用批处理文件通过 cURL 和 FTP 上传文件夹?

在 Windows 上使用批处理文件通过 cURL 和 FTP 上传文件夹?

我正在尝试通过 Windows 批处理文件 (.bat) 将整个文件夹(包括其子文件夹和文件)上传到我的服务器上的文件夹。

下面是我为上传部分提供的命令...

curl -T E:\Server\bootstrap3\_gh_pages\ -u USER:PASSWORD ftp://domain.com/bootstrap/

这是我得到的错误

curl: Can't open 'E:\Server\bootstrap3\_gh_pages\'!
curl: try 'curl --help' for more information

如果我尝试只处理 1 个文件,它可以正常工作,我需要以某种方式循环执行所有文件夹和文件,有什么帮助吗?

我已经在 Google 上搜索过,并尝试了几个不太好的例子,但还没有解决这个确切问题。

答案1

问题是 curl 不会循环遍历目录,没有上传整个目录的选项,也不支持 *-expansion。所以我最终的解决方案是编写一个 .bat 脚本。借助这个答案https://stackoverflow.com/a/9429985

@echo off 
set localdir=C:\something
set ftphost=your.ftp.host.com
set ftpuser=yourftpuser
set ftppass=yourftppassword
set ftpdir=target/directory/on/server

setlocal enableDelayedExpansion

for /F %%x in ('dir /B/D %localdir%') do (
  set FILENAME=%localdir%\%%x
  curl -T !FILENAME! ftp://%ftphost%/%ftpdir%/ --user %ftpuser%:%ftppass%
)

答案2

对于 Windows 没有用,但在 Linux 上你可以结合 curl 和 find:

find /server/ -exec curl -T {} ftp://some-ftp-site/folder/ --user user:pass \;

答案3

由于 curl 是为 *nix (unix) 编写的,因此在 Windows 命令提示符中指定工作命令可能会出现问题。这主要与处理"(双引号)标记,以及\(反斜杠)。

您可以尝试一个简单的方法:

  1. 将文件名括在双引号中。
  2. 通过在每个所需的反斜杠前添加另一个反斜杠来转义反斜杠。

因此,像这样:

curl -T "E:\\Server\\bootstrap3\\_gh_pages\\" -u USER:PASSWORD ftp://domain.com/bootstrap/

你也可以尝试使用这样的正斜杠,可能工作:

curl -T "E:/Server/bootstrap3/_gh_pages/" -u USER:PASSWORD ftp://domain.com/bootstrap/


您可以尝试的另一件事是使用-K(或者--config=)curl 的命令行选项开关(可以找到一些有用的信息这里)。

基本上,将所有命令行参数放在一个文件中,然后使用-K file(或者--config=file)来告诉 curl 在哪里找到参数。

因此,您可以创建一个文件(例如:test.txt),其中每个命令行选项都在单独的行上,如下所示:

-T "E:\\Server\\bootstrap3\\_gh_pages\\"
-u USER:PASSWORD
--url=ftp://domain.com/bootstrap/

然后像这样运行 curl:

curl -K test.txt
  or
curl --config=test.txt



如果上述方法均无效,您可能需要在 Windows 上从 Cygwin 终端窗口运行 curl 命令。请参阅此网页有关在 Windows 上将 curl 与 Cygwin 结合使用的信息。

答案4

与之前发布的 Linux 解决方案类似,在 Windows 中您可以执行以下操作:

forfiles /p C:\uploads /c "curl.exe -C -# -T @pathftp://某个 ftp 站点/文件夹/@文件--用户用户:密码”

相关内容