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

时间:2010-06-08 02:58:38

标签: vbscript sftp

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

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

基本上,压缩将每天进行两次,因此它的时间戳类似于yyyymmdd0900.zip(上午9点的时间表)和yyyymmdd1800.zip(下午6点的时间表)。转移后,我想将生成的zip文件移动(不复制)到另一个文件夹中。

任何指针都将非常感激。提前谢谢大家。

编辑:这是我根据一些谷歌搜索打了一些代码。它做我想做的事。请原谅“粘贴”,因为我无法弄清楚如何正确格式化。目前,它在复制后运行bat文件,但我注意到我需要发送(使用PuTTY Secure Copy)“最新”zip文件,然后再将其移动到“completed”文件夹。有人可以告诉我该怎么做吗?

  

压缩文件并重命名zip文件

On Error Resume Next

strFilepath =“c:\ files”

strDestination =“c:\ files \ completed \”

strExtension =“csv”

strYear =年(现在)

strMonth =右(“0”和月(现在),2)

strDay =右(“0”和日(现在),2)

strHour =右(“0”和小时(现在),2)

strMinute =右(“0”和分钟(现在),2)

strZip = strFilepath& “\”& strYear& strMonth& strday& strHour& strMinute& “的.zip”

设置objFSO = CreateObject(“Scripting.FileSystemObject”)

设置objFolder = objFSO.GetFolder(strFilepath)

对于objFolder.Files中的每个objFile

strFileExt = objFSO.GetExtensionName(objFile.Path)
    If LCase(strFileExt) = LCase(strExtension) Then
    ZipFile objFile.Path, strZip
End If

下一步

Sub ZipFile(strFileToZip,strArchive)

设置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

  

将文件移动到其他文件夹,然后将bat文件运行到secury复制文件到FTP位置

“瓦尔

Dim objFSO,objFileCopy,objFileDelete,dot,files,file

Dim strDestination,文件夹,子文件夹,fileCount,strFilePath

“的字符串

strDestination =“C:\ Files \ Completed \”

strFilePath =“C:\ Files”

set objFSO = CreateObject("Scripting.fileSystemObject") 

set folder = objFSO.getFolder(strFilePath) 

对于每个文件在folder.files

设置objFileCopy = objFSO.GetFile(文件)

   If objFSO.GetExtensionName(file) = "zip" Then                
    objFSO.MoveFile objFileCopy.Path, strDestination
   End If

下一步

昏暗的外壳

设置shell = createobject(“wscript.shell”)

Shell.run“C:\ testsend.bat”

设置shell = nothing

2 个答案:

答案 0 :(得分:0)

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
%>

答案 1 :(得分:0)

这会将文件移动到指定位置。

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