使用sftp将今天的zip文件与Linux服务器上的日期(如ABC_20161010_DEF.zip)一起移动到Windows服务器

时间:2016-10-10 10:32:32

标签: sftp

我使用下面的代码来移动zip文件。

不幸的是我无法正确设置。我想将Dt设置为" ABC_20161010_DEF.zip"

open UserNameHere@ServerNameHere
ascii
cd "ValidPathHere"
lcd "ValidPathHere"

Set Dt=SomePrefixHere_%date:~-4,4%%date:~-10,2%%date:~-7,2%_SomeSuffixHere.zip
get Dt

pause
quit

1 个答案:

答案 0 :(得分:0)

您正在将SFTP客户端(OpenSSH sftp?)命令(openget等)与Windows批处理文件命令(set)混合使用。那是不可能的。

您必须从Windows批处理文件中调用set,然后在SFTP脚本中使用已解析的值。如何做到这一点取决于您的SFTP客户端的功能。

如果您使用的是OpenSSH sftp,则必须动态生成脚本,因为其脚本无法解析环境变量。另一方面,OpenSSH sftp没有ascii命令。所以我不确定,你实际上在使用什么客户。

另请注意,使用date环境变量不可靠。它使用不同的区域设置提供不同的值。例如,在美国语言环境中,%date%会解析为ddd, mm/dd/yyyy,因此您将获得yyyymmdd。相反,在英国语言环境中,%date%会解析为dd/mm/yyyy,因此您将获得yyyyddmm。在其他语言环境中,您可以获得另一个结果。

一个简单且更可靠的解决方案是使用WinSCP SFTP client及其与语言环境无关的%TIMESTAMP% syntax。如果您需要,WinSCP还支持ascii/text mode (using the -transfer=ascii switch)

使用WinSCP scripting,您可以使用批处理文件(.bat),如:

"C:\Program Files (x86)\WinSCP\WinSCP.com" ^
  /log="C:\writable\path\to\log\WinSCP.log" /ini=nul ^
  /command ^
    "open sftp://username:password@example.com/ -hostkey=""...""" ^
    "get -transfer=ascii ""/remote/path/SomePrefixHere_%%TIMESTAMP#yyyymmdd%%"" ""C:\local\path\""" ^
    "exit"

您甚至可以拥有WinSCP generate the script/batch file template

(我是WinSCP的作者)