![从批处理文件中运行 ftp 批处理文件](https://linux22.com/image/1374660/%E4%BB%8E%E6%89%B9%E5%A4%84%E7%90%86%E6%96%87%E4%BB%B6%E4%B8%AD%E8%BF%90%E8%A1%8C%20ftp%20%E6%89%B9%E5%A4%84%E7%90%86%E6%96%87%E4%BB%B6.png)
我有一个计划任务,每天执行文件 ftp.txt 中的命令。该文件如下所示,它通过 ftp 连接到我的网站并将 3 个 XML 文件放到我的 Web 服务器上。
命令:
ftp -s:filename
命令执行的文件
open ftp.mysite.co.uk
username
password
put C:\file.xml location/file.xml
put C:\file1.xml location/file1.xml
put C:\file2.xml location/file2.xml
bye
我现在必须执行相同的传输,但传输到具有不同 ftp 详细信息的站点。我不想为每次传输安排新的 Windows 任务,所以我想知道是否有办法从由命令行触发的主 ftp.txt 文件执行其他 ftp.txt 文件?如果这不可能,我是否可以通过单个命令行命令运行多个 ftp 批处理文件。
答案1
你可以使用温SCP作为脚本化 FTP 客户端。
的脚本功能WinSCP
不支持任何控制序列、文件路径操作等。如果您需要这些,您必须从用另一种脚本语言实现的包装脚本中调用 WinSCP 脚本(如VB脚本)任何支持组件/ActiveX可以使用。
例子来自 WinSCP 网站:
<job>
<reference object="WinSCP.Session" />
<script language="VBScript">
Option Explicit
' Setup session options
Dim sessionOptions
Set sessionOptions = WScript.CreateObject("WinSCP.SessionOptions")
With sessionOptions
.Protocol = Protocol_Sftp
.HostName = "example.com"
.UserName = "user"
.Password = "mypassword"
.SshHostKeyFingerprint = "ssh-rsa 1024 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"
End With
Dim session
Set session = WScript.CreateObject("WinSCP.Session")
' Connect
session.Open sessionOptions
' Upload files
Dim transferOptions
Set transferOptions = WScript.CreateObject("WinSCP.TransferOptions")
transferOptions.TransferMode = TransferMode_Binary
Dim transferResult
Set transferResult = session.PutFiles("d:\toupload\*", "/home/user/", False, transferOptions)
' Throw on any error
transferResult.Check
' Print results
Dim transfer
For Each transfer In transferResult.Transfers
WScript.Echo "Upload of " & transfer.FileName & " succeeded"
Next
' Disconnect, clean up
session.Dispose
</script>
</job>
修改此类脚本以满足您的特定/动态需求。