将 RoboCopy 与 FtpUse 结合使用

将 RoboCopy 与 FtpUse 结合使用

我们的客户需要通过 FTP 将指定的文件从他们的网络传输到我们的网络。每当指定的文件之一发生更改时,必须自动调用传输。为此,RoboCopy 是完美的选择。但是,RoboCopy 不支持传输到 FTP 地址。因此,我想将我们的 FTP 站点映射到客户端服务器上的驱动器号。我发现FTP 使用非常适合将 FTP 映射到驱动器号。映射工作正常,我可以在 Windows 资源管理器中看到 FTP 站点的内容 - 我还可以将数据写入映射的 FTP 驱动器。

因此,假设我已使用以下命令将 FTP 站点映射到本地计算机上的驱动器 Q:

ftpuse Q: [ftp address] [password] /USER:[username]

并尝试使用此命令设置 RoboCopy:

robocopy [source dir] Q:\ *.xls *.xlsx /COPY:DAT /LOG+:"[LogDir]\FtpCopyLog.txt" /V /NP /MON:1 /MOT:1 /R:10 /W:30 

当 RoboCopy 运行时,它会失败并显示以下错误消息:

错误 87 (0x00000057) 复制文件 [源目录]\test2.xlsm 参数不正确

我尝试映射驱动器并在相同的用户帐户下运行 RoboCopy 命令,但似乎无法解决问题。

希望有人可以帮忙。

任何帮助将不胜感激。

答案1

尝试在镜像模式下使用 WinSCP。WinSCP 可以从此处下载:

http://winscp.net/eng/download.php

使用 WinSCP 您不需要映射驱动器,它只需直接连接到 FTP 并为您完成工作。

这是一个小型 BAT 脚本,其功能与 ROBOCOPY 类似。

注意:我添加了 -delete 选项,用于删除不再与本地文件夹匹配的远程文件。需要双引号,因为本地路径中有空格。

set FTPSERVER=v2008  
set FTPUSER=username  
set FTPPASS=password  
set FTPLOCALE=C:\Users\User\Desktop\Local folder  
set FTPREMOTO=/public  
winscp.com /command "open ftp://%FTPUSER%:%FTPPASS%@%FTPSERVER%/" ^
  "synchronize remote -delete ""%FTPLOCALE%"" %FTPREMOTO%"

答案2

执行复制时,您有权创建文件,但无权覆盖它们。文件有多大?据我所知,每次编辑文件时,文件都会被整个复制一次,然后用新版本覆盖旧文件。没有办法评估文件中发生了什么变化,而只是附加新数据?由于您不是要附加数据,而且您使用的工具不允许您覆盖文件,因此理论上您可以编写某种中间脚本,在复制新文件之前立即删除检测到的过时文件。这听起来像是一个笨拙的解决方案,但整个过程听起来也像是一个笨拙的过程。就我个人而言,我会重新评估这里的目标是什么,但我只想坚持回答这个问题。祝你好运!

答案3

既然您已经在使用 Windows,为什么不使用 power shell 来执行此操作?您可以仅指定新文件并使用 Windows 任务计划程序安排任务,所有这些都使用内置的 Windows 工具。无需为内置功能付费。我假设您使用的不是安全的 FTP 连接。一些快速脚本将为您提供非常灵活、廉价的解决方案。我有几个 power shell 脚本,可以根据特定标准提取和推送 FTP 文件。

相关内容