Vbscript SFTP传输文件并将文件移动到文件夹
这是我的第一篇文章,请原谅我的无知。我正在使用vbscript压缩特定文件夹中的所有.csv类型文件。在一些谷歌搜索之后,我找到了一个可行的方法来实现这一点,并启用了一个计划任务来自动化这一点 接下来我需要做的是通过sftp传输zip文件,然后将该zip文件“移动”到另一个文件夹中。我相信前者可以通过命令行使用pscp.exe实现,但有人能告诉我如何实现后者吗 基本上,压缩将一天进行两次,因此其时间戳类似于Vbscript SFTP传输文件并将文件移动到文件夹,vbscript,sftp,Vbscript,Sftp,这是我的第一篇文章,请原谅我的无知。我正在使用vbscript压缩特定文件夹中的所有.csv类型文件。在一些谷歌搜索之后,我找到了一个可行的方法来实现这一点,并启用了一个计划任务来自动化这一点 接下来我需要做的是通过sftp传输zip文件,然后将该zip文件“移动”到另一个文件夹中。我相信前者可以通过命令行使用pscp.exe实现,但有人能告诉我如何实现后者吗 基本上,压缩将一天进行两次,因此其时间戳类似于yyyymmdd0900.zip(对于上午9点的时间表)和yyyymmdd1800.zip
yyyymmdd0900.zip
(对于上午9点的时间表)和yyyymmdd1800.zip
(对于下午6点的时间表)。传输后,我想将生成的zip文件移动(而不是复制)到另一个文件夹中
任何指点都将不胜感激。提前谢谢大家
编辑:以下是我根据一些谷歌搜索拼凑的一些代码。它做了我想让它做的事。请原谅“粘贴”,因为我不知道如何正确设置格式。目前,它在复制后运行bat文件,但我注意到,在将其移动到“已完成”文件夹之前,我需要发送(使用PuTTY Secure Copy)最新的zip文件。有人能告诉我怎么做吗
压缩文件并重命名压缩文件
我的代码:
On Error Resume Next
strFilepath = "c:\files"
strDestination = "c:\files\completed\"
strExtension = "csv"
strYear = Year(Now)
strMonth = Right("0" & Month(Now), 2)
strDay = Right("0" & Day(Now), 2)
strHour = Right ("0" & Hour(Now), 2)
strMinute = Right ("0" & Minute (Now), 2)
strZip = strFilepath & "\" & strYear & strMonth & strDay & strHour & strMinute & ".zip"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(strFilepath)
For Each objFile in objFolder.Files
strFileExt = objFSO.GetExtensionName(objFile.Path)
If LCase(strFileExt) = LCase(strExtension) Then
ZipFile objFile.Path, strZip
End If
Next
Sub ZipFile(strFileToZip, strArchive)
Set objFSO = CreateObject("Scripting.FileSystemObject")
If Not objFSO.FileExists(strArchive) Then
Set objTxt = objFSO.CreateTextFile(strArchive)
objTxt.Write "PK" & Chr(5) & Chr(6) & String(18, Chr(0))
objTxt.Close
End If
Set objApp = CreateObject( "Shell.Application" )
intCount = objApp.NameSpace(strArchive).Items.Count + 1
objApp.NameSpace(strArchive).CopyHere strFileToZip
Do
WScript.Sleep 200
set objNameSpace = objApp.NameSpace(strArchive)
If Not objNameSpace is nothing Then
If objNameSpace.Items.Count = intCount Then
Exit Do
End If
End If
Loop
End Sub
>Move file to a different folder and then run a bat file to secury copy file to a FTP location
'Vars
Dim objFSO, objFileCopy, objFileDelete, dot, files, file
Dim strDestination, folder, subfolder, fileCount, strFilePath
'Strings
strDestination = "C:\Files\Completed\"
strFilePath = "C:\Files"
set objFSO = CreateObject("Scripting.fileSystemObject")
set folder = objFSO.getFolder(strFilePath)
For Each file In folder.files
Set objFileCopy = objFSO.GetFile(file)
If objFSO.GetExtensionName(file) = "zip" Then
objFSO.MoveFile objFileCopy.Path, strDestination
End If
Next
Dim shell
Set shell=createobject("wscript.shell")
Shell.run "C:\testsend.bat"
Set shell=nothing
sftp客户端提供了在执行任何文件传输之前更改主机上工作目录的方法。因此,最好将文件直接传输到目标位置 注:以上回答是对问题的误解。我认为这意味着文件必须在目的地移动,但真正的操作是在原点移动文件 我发现下面的示例代码在检查文件是否存在后移动文件。源参数允许使用通配符,但FileExists可能无法工作。需要vbscript 2.0才能工作
<%
dim filesys
set filesys=CreateObject("Scripting.FileSystemObject")
If filesys.FileExists("c:\sourcefolder\anyfile.html") Then
filesys.MoveFile "c:\sourcefolder\anyfile.html", "c:\destfolder\"
End If
%>
这将文件移动到指定位置
Sub Move_File(Source_File, Destination_Folder)
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
fso.MoveFile Source_File, Destination_Folder
Set fso = Nothing
End Sub
谢谢你的回复。对不起,我应该说明传输是一个远程位置,我刚才说的“移动”是文件所在的本地框。我还希望在执行zip后自动执行此操作,然后让sftp从文件所在的任何位置传输它。希望我有点道理。SFTP根本没有工作目录的概念-根据标准,所有路径都必须是绝对路径。是客户端软件,模拟了当前的目录概念。@Eugene,很好的解释。我会更新答案。谢谢。我们可以使用上述逻辑将文件传输到Unix系统中的远程目录吗?…如果需要用户名和密码才能登录到Unix系统,我可以在此传递它们吗?。谢谢。