在 Windows 命令提示符下,我通过 FTPd 连接到 Windows Web 服务器。我可以get
一个文件,我可以看到一个目录列表dir
,但我想在本地保存该列表。
我试过了dir > c:\somefile.txt
,文件被创建了,但它是空白的。如果我这样做也是一样ls > c:\somefile.txt
。
当我从 Linux 机器上 FTP 时,结果是一样的。
FTP 发回以下内容:
200 PORT 命令成功 150 打开 /bin/ls 的 ASCII 模式数据连接 226 传输完成
这可能是因为 FTP.exe 控制了 shell。因此,由 cmd.exe 处理的重定向无效。
您可以做的是使用 -s:filename 选项并将整个 ftp 输出重定向到文件。它将包含比您想要的更多的内容,但您可以稍后处理。
或者,也许,寻找具有此功能的其他 ftp 客户端(我不知道有任何功能)。
Igal Serban 的回答是正确的。尝试这个,
其中ftp.txt是一个脚本,只是一个命令列表,例如,
ftp.log将捕获输出。添加
2>&1
意味着您捕获标准输出(正常输出)和标准错误(来自ftp.exe的任何错误消息)。您可以通过执行以下操作将目录列表放入本地文件:
在您的情况下,命令将是
它不回答为什么的问题,而是完成你想要做的事情。
最简单的方法是打开计算机文件夹,您可以在其中看到所有驱动器。在这里您需要为 ftp 服务器创建一个快捷方式。为此,请在计算机文件夹中的空白空间上单击鼠标右键并单击“添加网络位置”,然后单击它并按照提示为您的网络 ftp 服务器创建快捷方式。如果您有密码或匿名,请这样做。你也可以给它一个名字。它将出现在计算机文件夹的网络位置中。现在双击它。要打开>查看、阅读或播放和编辑文件夹或其文件,您需要拖动>复制或将其移动到桌面。完成后,您可以将其移回。这有点麻烦,但对我有用。希望对大家有帮助!
Martin Bøgelund 回答的附录:
为什么问题(我假设是“为什么最初的尝试做了它所做的事情”)很有趣,而且当你以正确的方式思考它时很简单:它是相同的
dir [remote-directory] [local-file]
语法,远程目录恰好位于>
. ftp 客户端不是外壳。键入的命令不是 shell 命令。它没有重定向运算符,>
也不是特殊字符。是的,只要您不在 Windows 上运行它,您就可以在 FTP 服务器上拥有一个名为的目录。
>
在
ftp.exe
Windows 中找到的是早期 BSD ftp 的副本。它不知道 Windows 文件名限制。如果您告诉它,get remotefile >
它将尝试将远程文件的副本保存为名为的本地文件>
,并且由于本地文件系统的限制而失败。造成这里混乱的一个主要原因是 FTP 服务器在接收到作为参数的
LIST
命令时>
,以成功代码和空的回复正文作为响应,而不是说“没有这样的文件”。这并不能真正回答问题,但您是否考虑过编写脚本来执行此操作,然后重定向脚本的输出?
http://support.microsoft.com/kb/96269
可能 ftp 服务器进程没有写入 c: 的权限。尝试 c:\somedir\somefile.txt 代替
保存此文件。例如,我将其保存为
dp.sh
. 之后运行命令: