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

问题描述:

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

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

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

任何指针将不胜感激。谢谢大家。

编辑:这里是一些基于一些谷歌搜索一起打耳光的代码。它做我想要它做的事。请原谅“粘贴”,因为我无法弄清楚如何正确格式化。目前,它在复制后运行bat文件,但我只注意到我需要发送(使用PuTTY Secure Copy)“最新”zip文件,然后将其移至“已完成”文件夹。有人可以告诉我如何做到这一点?

荏苒文件和压缩文件

重命名错误继续下一步

strFilepath = “C:\文件”

strDestination =“C:\文件\完成\ “

strExtension =”csv“

strY耳=年(现在)

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)

对于每个OBJFILE在objFolder 。文件

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

接着

子的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 

结束子

将文件移动到其他文件夹然后运行一个批处理文件来secury拷贝文件到FTP位置

“瓦尔

昏暗objFSO,objFileCopy,objFileDelete,圆点,文件,文件

昏暗strDestination,文件夹,子文件夹,fileCount ,strFilePath

“字符串

strDestination = “C:\文件\完成\”

strFilePath = “C:\文件”

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 =什么

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

感谢您的回复。对不起,我应该明确指出,转移是一个远程位置,而我在本地对该文件所在的盒子说的“移动”。我也想在执行zip之后自动执行此操作,然后让sftp从文件所在的位置传输它。希望我有所帮助。 – molecule 2010-06-08 03:41:38

+1

SFTP根本没有工作目录的概念 - 根据标准,所有路径必须是绝对路径。这是客户端软件,模拟当前目录概念。 – 2010-06-08 11:04:43

+0

@Eugene,很好的说明。我会更新答案。谢谢。 – 2010-06-08 12:59:33

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

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 
+0

我们可以使用上述逻辑将文件传输到Unix系统中的远程目录吗?...如果需要用户名和密码登录到Unix系统,我可以在这里传递它们吗?..谢谢。 – Ejaz 2015-05-06 08:04:38