使用 WinSCP 5.2,我想将多个带有文件扩展名的文件.pgp
放在 SFTP 站点上。当我测试我的原始命令行(见下文)时,它只将第一个*.pgp
字母文件(D:\a.csv.pgp
)放在 SFTP 站点上。我尝试指定*.PGP
并且*.pgp
不做任何更改 -D:\a.csv.pgp
每次只会复制一个文件()。只有当我为每个文件指定一个 put 命令时,我才能让它对所有文件起作用.pgp
。关于如何将所有文件放在*.pgp
SFTP 站点上有什么想法吗?
原始命令行-不起作用
d:\winscp\winscp /command "option echo off" "option batch on" "option confirm off" "open sftp" "put D:\*.pgp" "close" "exit"
作品
d:\winscp\winscp /command "option echo off" "option batch on" "option confirm off" "open sftp" "put D:\a.csv.pgp" "put D:\b.csv.pgp" "put D:\c.csv.pgp" "put D:\d.csv.pgp" "put D:\e.csv.pgp" "put D:\f.csv.pgp" "put D:\g.csv.pgp" "put D:\h.csv.pgp" "put D:\i.csv.pgp" "close" "exit"
答案1
您似乎正在使用 SFTP 模式,而不是 SCP 模式
尝试mput *.pgp
(根据 FTP 命令的猜测)
这手动的说通配符应该有效
put <file> [ [ <file2> ... ] <directory>/[ <newname> ] ]
如果仅指定一个参数,则将文件上传到远程工作目录。如果指定了多个参数,除最后一个参数外,所有参数都指定要上传的文件集。最后一个参数指定目标远程目录和可选的操作掩码,以不同的名称存储文件。目标目录必须以斜杠结尾。文件名可以用 Windows 通配符 1) 替换以选择多个文件。要将更多文件上传到当前工作目录,请使用 ./ 作为最后一个参数。
…
put *.html *.png /home/martin/backup/*.bak
您必须将目标目录作为引用命令的最后一项。
d:\winscp\winscp /command "option echo off" "option batch on" "option confirm off" "open sftp" "put D:\*.pgp ""C:\Documents and Settings\newtowinscp\Documents\Backups""" "close" "exit"
答案2
如果您从脚本运行此操作,则可以创建一个循环。您将获取所有 *.pgp 文件并遍历列表。您实际上会单独上传文件;无论如何,我不认为协议级别的 SFTP/SCP 会一次移动多个文件,因此我认为这不会影响性能,它可能也会使错误处理更容易。
我相信有一种方法可以使用纯本机命令行来做到这一点,但在我的备份脚本中(我做相反的事情,我从我的 SFTP 站点拉下文件)我使用了 Microsoft 的这个程序(forfiles):http://technet.microsoft.com/en-us/library/cc753551(WS.10).aspx。我将让您阅读那里的示例,了解如何最有效地使用它来满足您的需求。基本上,您将使用通配符作为文件名,然后为每个实例运行上传命令。
答案3
您的第一个命令(带有)没有任何问题put D:\*.pgp
。
由于您声称只上传了一个文件,因此很可能是因为发生了一些错误,导致脚本无法继续处理其他文件。这肯定是实际上传(如果成功)之后的操作错误,例如更新上传文件的时间戳或权限。
比如这个错误: 文件 .. 上传成功,但设置权限和/或时间戳时出错。如果问题仍然存在,请关闭设置权限或保留时间戳。或者,您可以打开“忽略权限错误”选项。。
您应该清楚地看到脚本输出或会话日志文件中实际上存在什么错误。