Vbscript SFTP传输文件并将文件移动到文件夹

Vbscript SFTP传输文件并将文件移动到文件夹,vbscript,sftp,Vbscript,Sftp,这是我的第一篇文章,请原谅我的无知。我正在使用vbscript压缩特定文件夹中的所有.csv类型文件。在一些谷歌搜索之后,我找到了一个可行的方法来实现这一点,并启用了一个计划任务来自动化这一点 接下来我需要做的是通过sftp传输zip文件,然后将该zip文件“移动”到另一个文件夹中。我相信前者可以通过命令行使用pscp.exe实现,但有人能告诉我如何实现后者吗 基本上,压缩将一天进行两次,因此其时间戳类似于yyyymmdd0900.zip(对于上午9点的时间表)和yyyymmdd1800.zip

这是我的第一篇文章,请原谅我的无知。我正在使用vbscript压缩特定文件夹中的所有.csv类型文件。在一些谷歌搜索之后,我找到了一个可行的方法来实现这一点,并启用了一个计划任务来自动化这一点

接下来我需要做的是通过sftp传输zip文件,然后将该zip文件“移动”到另一个文件夹中。我相信前者可以通过命令行使用pscp.exe实现,但有人能告诉我如何实现后者吗

基本上,压缩将一天进行两次,因此其时间戳类似于
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系统,我可以在此传递它们吗?。谢谢。