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

问题描述:

我使用下面的代码来移动zip文件。使用sftp将今天的日期(如ABC_20161010_DEF.zip)的zip文件从Linux服务器移动到Windows服务器

不幸的是我无法得到设置部分权利。我想与Windows批处理文件命令(set)设置申能有像 “ABC_20161010_DEF.zip”

open [email protected] 
ascii 
cd "ValidPathHere" 
lcd "ValidPathHere" 

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

pause 
quit 
+0

什么'sftp'脚本是什么? OpenSSH的? –

你混合SFTP客户端(OpenSSH的sftp?)值命令(openget等)。这是不可能的。

您必须从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:[email protected]/ -hostkey=""..."""^
    "get -transfer=ascii ""/remote/path/SomePrefixHere_%%TIMESTAMP#yyyymmdd%%"" ""C:\local\path\"""^
    "exit" 

你甚至可以有WinSCP generate the script/batch file template你。

(我的WinSCP的作者)