SFTP передача файла и перемещение файла в папку - PullRequest
1 голос
/ 08 июня 2010

Это мой первый пост, так что прошу прощения за мое невежество. Я использую vbscript для архивирования всех файлов типа .csv в определенной папке. После некоторых поисков в Google я нашел работоспособное vbscript для этого и включил запланированное задание для автоматизации этого.

Далее мне нужно передать zip-файл через sftp, а затем «переместить» этот zip-файл в другую папку. Я считаю, что первое может быть достигнуто с помощью pscp.exe через командную строку, но может кто-нибудь показать мне, как это сделать?

Обычно архивирование выполняется два раза в день, поэтому у него будет метка времени, аналогичная yyyymmdd0900.zip (для расписания на 9 часов) и yyyymmdd1800.zip (для расписания на 6 часов). После передачи я хочу переместить (не копировать) созданный zip-файл в другую папку.

Любые указатели будут с благодарностью. Спасибо всем заранее.

РЕДАКТИРОВАТЬ: Вот код, который я собрал вместе на основе некоторых поисков Google Он делает то, что я хочу. Пожалуйста, извините за "вставку", так как я не мог понять, как правильно отформатировать его. В настоящее время он запускает bat-файл после копирования, но я только что заметил, что мне нужно отправить (используя PuTTY Secure Copy) «последний» zip-файл, прежде чем перемещать его в «завершенную» папку. Может кто-нибудь показать мне, как это сделать?

Архивирование файла и переименование zip-файла

В случае ошибки Продолжить Далее

strFilepath = "c: \ files"

strDestination = "c: \ files \ complete \"

strExtension = "csv"

strYear = Год (сейчас)

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")

Установить objFolder = objFSO.GetFolder (strFilepath)

Для каждого objFile в objFolder.Files

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

Далее

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

Переместите файл в другую папку, а затем запустите bat-файл, чтобы защитить копию файла на FTP-сервере

Варс

Dim objFSO, objFileCopy, objFileDelete, точка, файлы, файл

Dim strDestination, папка, подпапка, fileCount, strFilePath

Строки

strDestination = "C: \ Files \ Completed \"

strFilePath = "C: \ Files"

set objFSO = CreateObject("Scripting.fileSystemObject") 

set folder = objFSO.getFolder(strFilePath) 

Для каждого файла в папке .file

Установить objFileCopy = objFSO.GetFile (файл)

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

Далее

тусклая оболочка

Set shell = createobject ("wscript.shell")

Shell.run "C: \ testsend.bat"

Установить оболочку = ничего

Ответы [ 2 ]

0 голосов
/ 08 июня 2010

Это переместит файл в указанное место.

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 голосов
/ 08 июня 2010

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