我使用下面的代码来移动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
答案 0 :(得分:0)
您正在将SFTP客户端(OpenSSH sftp
?)命令(open
,get
等)与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的作者)