FTP 通过批处理文件

FTP via batch file

我在论坛上搜索了一下,找到了几个与这个问题相关的post,但是我要找的答案不在post中。

我正在从这个 post here 中提取我的参考资料。

在此批处理文件中,用户指定了以下内容:

@echo off
echo user ahk@proflightsimulatoreview.com> ftpcmd.dat
echo ahktest>> ftpcmd.dat
echo put %1>> ftpcmd.dat
echo quit>> ftpcmd.dat
ftp -n -s:ftpcmd.dat ftp.proflightsimulatoreview.com
del ftpcmd.dat

我的问题如下:

  1. put 命令表示 %1。如果我想在不同的目录中指定一个文件,我是否可以将该目录的路径放在 put 命令之后?假设 bat 文件与我要发送的文件不在同一个目录中。

  2. put 命令表示 %1,用户从命令行执行 MYFTP.BAT c:\temp\hello.txt。我没有从命令行执行任何操作,而是从另一个应用程序调用 bat 文件。如果我不想传递参数,我可以在路径中硬编码并替换 %1?

  3. ftp 命令作为 ftp -n -s:ftpcmd.dat ftp.proflightsimulatoreview.com 嵌入到 .bat 文件中。如果我想删除写入文件然后调用文件的步骤,FTP 语法是什么?写入文件并调用文件然后删除与直接将值放入 FTP 命令有什么好处?

首先,我建议您在脚本中将 %1 用双引号引起来,以防您的文件名中包含 space,即万一用户执行以下操作:

MYFTP.BAT "C:\Programs and Junk\Path with Space\file.txt"

问题 1 和 2 有一个共同的基础,当您理解它时,将帮助您了解它们之间的关联。当你这样做时:

PUT FILE.TXT

FTP协议在当前目录下取FILE.TXT因为你没有指定目标文件 它将它放在 FTP 服务器上同名的当前目录中。所以,如果你这样做,你会遇到问题:

PUT C:\FREDDYFROG\FILE.txt

除非 FTP 服务器有一个名为 "C:\FREDDYFROG" 的目录,这在 Unix 服务器上是极不可能的!所以你应该考虑在服务器上指定一个文件名,如下所示:

PUT C:\FREDDYFROG\FILE.TXT SomeFile.txt

此外,您可以更改服务器上的目录,使用 CD 以便上传的文件“land”在服务器上的不同目录中。您还可以使用 LCD 在计算机上本地更改目录。因此,以下命令会将本地文件 \FREDDYFROG\FILE.TXT 上传到服务器的文件系统 /incoming/somefile.txt

LCD \FREDDYFROG
CD /incoming
PUT FILE.TXT somefile.txt

以下也会如此

PUT \FREDDYFROG\FILE.TXT /incoming/somefile.txt

最后,你的第三个问题。您 将命令放入 Microsft FTP 客户端的文件中,它不会从标准输入读取命令我知道。

您可能更喜欢 curl 而不是 Micorosft 的 FTP 客户端(如果可用的话),这将避免创建临时脚本文件并像这样一次完成所有操作的需要:

curl -v -u user:password -T \FREDDYFROG\FILE.TXT ftp://server/mydir/somefile.txt