来自 VBScript 的 Winscp - "get" 不下载文件
Winscp from VBScript - "get" doesn't download files
我是 Winscp 和 VBScript 的新手,我需要一个脚本来从远程服务器下载文件名中包含昨天日期的文件。我尽我所能并最终创建了 2 个不同的脚本,这两个脚本似乎都有相同的问题。
从日志文件中,我可以看到 Winscp 打开了目录,正确地解释了文件名模式,列出了目录内容,但随后只是退出而不是获取指定的文件。我不知道出了什么问题。感谢您的帮助!
这是我写的 2 个脚本:
第一个:
main
Sub main()
Dim mydate
Dim cmd1, cmd2_sftpcmd, cmd3, cmdActivity
Dim wshShell
Set wshShell = WScript.CreateObject("WScript.Shell")
'------------------------------ SET VARIABLES --------------
mydate = date - 1
MM_DD_YYYY =Right("00" & Month(mydate),2) &"-"& Right("00" & Day(mydate),2) & "-" & CSTR(Year(mydate))
cmd1="@echo off & cd C:/Program Files (x86)/WinSCP/ "
cmd2_sftpcmd = "winscp.exe /console /log=""E:/DATA/script/log_winscp_get_files.log"" /loglevel=0 /command ""open sftp://XXXX@XXXX.com -privatekey=""C:/putty/XXXX/xxxx.ppk"""" ""cd /exports"" ""option transfer binary"" ""get ""filename_" & MM_DD_YYYY & "_*.csv.gz"" E:/DATA/"" ""close"" ""exit"""
cmd3="exit"
cmdActivity = "cmd /k " & cmd1 & " && " & cmd2_sftpcmd & " && " & cmd3 '
'------------------------------- RUN WScript Shell--------------
wshShell.Run cmdActivity
End Sub
第二个:
Function SFTPDownload()
Dim mydate, mmddyyyy, sFTPScript
Set oFTPScriptFSO = CreateObject("Scripting.FileSystemObject")
Set oFTPScriptShell = CreateObject("WScript.Shell")
mydate = date - 1
mmddyyyy = Right("00" & Month(mydate),2) &"-"& Right("00" & Day(mydate),2) & "-" & CSTR(Year(mydate))
sFTPScript = sFTPScript & "option batch on" & vbCRLF
sFTPScript = sFTPScript & "option confirm off"& vbCrLf
sFTPScript = sFTPScript & "option transfer binary" & vbCrLf
sFTPScript = sFTPScript & "open sftp://XXXX@XXXX.com -privatekey=C:/putty/XXXX/xxxx.ppk" & vbCrLf
sFTPScript = sFTPScript & "cd /exports" & vbCrLf
sFTPScript = sFTPScript & "get filename_" & mmddyyyy & "_*.csv.gz E:/DATA/" & vbCRLF
sFTPScript = sFTPScript & "close" & vbCrLf
sFTPScript = sFTPScript & "exit" & vbCrLf
sFTPTemp = oFTPScriptShell.ExpandEnvironmentStrings("%TEMP%")
sFTPTempFile = sFTPTemp & "\" & oFTPScriptFSO.GetTempName
'Write the input file for the sftp command to a temporary file.
Set oFTPScript = oFTPScriptFSO.CreateTextFile(sFTPTempFile, True)
oFTPScript.WriteLine(sFTPScript)
oFTPScript.Close
Set oFTPScript = Nothing
sCmd = """C:\Program Files (x86)\WinSCP\winscp.exe"" /console /log=""E:/DATA/script/log_winscp_get_files.log"" /loglevel=1 -script=" & sFTPTempFile
oFTPScriptShell.run sCmd
Wscript.Sleep 1000
' Get rid of temp file used for input to sftp
oFTPScriptFSO.DeleteFile(sFTPTempFile)
Set oFTPScriptFSO = Nothing
Set oFTPScriptShell = Nothing
End Function
SFTPDownload()
天呐!我刚刚意识到我一直在寻找错误的日期模式(mm-dd-yyyy 而不是 yyyy-mm-dd)...这两个脚本都有效。我想我会把它留在这里以防将来有人需要它。
干杯!
我是 Winscp 和 VBScript 的新手,我需要一个脚本来从远程服务器下载文件名中包含昨天日期的文件。我尽我所能并最终创建了 2 个不同的脚本,这两个脚本似乎都有相同的问题。
从日志文件中,我可以看到 Winscp 打开了目录,正确地解释了文件名模式,列出了目录内容,但随后只是退出而不是获取指定的文件。我不知道出了什么问题。感谢您的帮助!
这是我写的 2 个脚本:
第一个:
main
Sub main()
Dim mydate
Dim cmd1, cmd2_sftpcmd, cmd3, cmdActivity
Dim wshShell
Set wshShell = WScript.CreateObject("WScript.Shell")
'------------------------------ SET VARIABLES --------------
mydate = date - 1
MM_DD_YYYY =Right("00" & Month(mydate),2) &"-"& Right("00" & Day(mydate),2) & "-" & CSTR(Year(mydate))
cmd1="@echo off & cd C:/Program Files (x86)/WinSCP/ "
cmd2_sftpcmd = "winscp.exe /console /log=""E:/DATA/script/log_winscp_get_files.log"" /loglevel=0 /command ""open sftp://XXXX@XXXX.com -privatekey=""C:/putty/XXXX/xxxx.ppk"""" ""cd /exports"" ""option transfer binary"" ""get ""filename_" & MM_DD_YYYY & "_*.csv.gz"" E:/DATA/"" ""close"" ""exit"""
cmd3="exit"
cmdActivity = "cmd /k " & cmd1 & " && " & cmd2_sftpcmd & " && " & cmd3 '
'------------------------------- RUN WScript Shell--------------
wshShell.Run cmdActivity
End Sub
第二个:
Function SFTPDownload()
Dim mydate, mmddyyyy, sFTPScript
Set oFTPScriptFSO = CreateObject("Scripting.FileSystemObject")
Set oFTPScriptShell = CreateObject("WScript.Shell")
mydate = date - 1
mmddyyyy = Right("00" & Month(mydate),2) &"-"& Right("00" & Day(mydate),2) & "-" & CSTR(Year(mydate))
sFTPScript = sFTPScript & "option batch on" & vbCRLF
sFTPScript = sFTPScript & "option confirm off"& vbCrLf
sFTPScript = sFTPScript & "option transfer binary" & vbCrLf
sFTPScript = sFTPScript & "open sftp://XXXX@XXXX.com -privatekey=C:/putty/XXXX/xxxx.ppk" & vbCrLf
sFTPScript = sFTPScript & "cd /exports" & vbCrLf
sFTPScript = sFTPScript & "get filename_" & mmddyyyy & "_*.csv.gz E:/DATA/" & vbCRLF
sFTPScript = sFTPScript & "close" & vbCrLf
sFTPScript = sFTPScript & "exit" & vbCrLf
sFTPTemp = oFTPScriptShell.ExpandEnvironmentStrings("%TEMP%")
sFTPTempFile = sFTPTemp & "\" & oFTPScriptFSO.GetTempName
'Write the input file for the sftp command to a temporary file.
Set oFTPScript = oFTPScriptFSO.CreateTextFile(sFTPTempFile, True)
oFTPScript.WriteLine(sFTPScript)
oFTPScript.Close
Set oFTPScript = Nothing
sCmd = """C:\Program Files (x86)\WinSCP\winscp.exe"" /console /log=""E:/DATA/script/log_winscp_get_files.log"" /loglevel=1 -script=" & sFTPTempFile
oFTPScriptShell.run sCmd
Wscript.Sleep 1000
' Get rid of temp file used for input to sftp
oFTPScriptFSO.DeleteFile(sFTPTempFile)
Set oFTPScriptFSO = Nothing
Set oFTPScriptShell = Nothing
End Function
SFTPDownload()
天呐!我刚刚意识到我一直在寻找错误的日期模式(mm-dd-yyyy 而不是 yyyy-mm-dd)...这两个脚本都有效。我想我会把它留在这里以防将来有人需要它。 干杯!