2010-06-08 493 views
1

這是我的第一篇文章,請原諒我的無知。我正在使用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 =什麼

回答

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

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

我們可以使用上述邏輯將文件傳輸到Unix系統中的遠程目錄嗎?...如果需要用戶名和密碼登錄到Unix系統,我可以在這裏傳遞它們嗎?..謝謝。 – Ejaz 2015-05-06 08:04:38

相關問題