如何使用批处理脚本将文件上传到 FTP 服务器?

abh*_*ayk 2 windows ftp batch command-line batch-file

我创建了一个名为的批处理文件FTP_automation.bat,其中包含以下代码。

SET MyPath=E\PGP\test_pg
ftp
open 142.245.30.165 21
TESTA9MS
test11
binary
put %MyPath%
quit
Pause
Run Code Online (Sandbox Code Playgroud)

当我运行时FTP_automation.bat,它没有上传我传递参数的文件。

脚本ftp在批处理文件中提到之后停止,并且它没有连接到我在批处理文件中传递的 IP 地址和端口号。

如果我手动输入这些命令,它运行良好。我应该对这段代码做哪些更正?

Mar*_*ryl 6

您必须将ftp命令放在一个单独的文件中。您不能将您在终端上键入的行放入.bat文件并期望它的行为相同。该.bat文件只能包含 Windows 命令。当您ftp从批处理文件运行命令时,它会等待其命令。它不知道该.bat文件,因此无法从那里读取命令。

所以把你的命令放到一个单独的文本文件中(例如ftp.txt)。

open 142.245.30.165 21
TESTA9MS
test11
binary
put E\PGP\test_pg
quit
Run Code Online (Sandbox Code Playgroud)

并从.bat文件中运行它,如:

ftp -s:ftp.txt
pause
Run Code Online (Sandbox Code Playgroud)

如果您确实需要使用动态文件名(来自环境变量),则需要即时创建文本文件。在ftp不支持的变量。


如果您使用更好的 FTP 客户端,您可能能够在批处理文件中包含命令并使用环境变量。

例如使用WinSCP

set MyPath=E\PGP\test_pg

winscp.com /command ^
    "open ftp://TESTA9MS:test11@142.245.30.165" ^
    "put ""%MyPath%""" ^
    "exit"

pause
Run Code Online (Sandbox Code Playgroud)

有关使用 WinSCP 编写脚本的介绍,请参见:https :
//winscp.net/eng/docs/guide_automation

还有一个将 Windows FTP 脚本转换为 WinSCP 脚本的指南

(我是 WinSCP 的作者)