2010-06-08 2 views
1

이것은 내 첫 번째 게시물이므로 제 양해 해 주시기 바랍니다. vbscript를 사용하여 특정 폴더의 모든 .csv 유형 파일을 압축합니다. 일부 Google 검색을 수행 한 후이를 수행하기 위해 실행할 수있는 vbscript을 발견했으며이를 자동화하는 예약 된 작업을 활성화했습니다.SFTP 전송 파일 및 폴더로 파일 이동

내가해야 할 일은 sftp를 통해 zip 파일을 전송 한 다음 해당 zip 파일을 다른 폴더로 "이동"하는 것입니다. 필자는 전자가 명령 줄을 통해 pscp.exe를 사용하여 얻을 수 있다고 믿지만 다른 사람이 후자를 수행하는 방법을 보여줄 수 있습니까?

기본적으로 압축은 하루에 두 번 수행되므로 yyyymmdd0900.zip (9am 스케줄) 및 yyyymmdd1800.zip (오후 6:00 스케줄)과 유사한 타임 스탬프가 있습니다. 전송 후 다른 폴더로 생성 된 zip 파일을 이동 (복사가 아님)하고 싶습니다.

모든 포인터가 크게 감사하겠습니다. 모두에게 미리 감사드립니다.

편집 : 다음은 일부 Google 검색을 기반으로 함께 때린 코드입니다. 그것은 내가하고 싶은 일을합니다. 내가 제대로 포맷하는 방법을 알아낼 수 없기 때문에 "붙여 넣기"를 변명하십시오. 현재, 그것은 복사 한 후 박쥐 파일을 실행하지만 방금 "완성 된"폴더로 이동하기 전에 "PuTTY Secure Copy"를 사용하여 "최신"zip 파일을 전송해야한다는 것을 알았습니다. 누군가 이걸하는 방법을 보여 주실 수 있습니까?

파일을 지퍼로 잠그는 및

strFilepath = "C : \ 파일"다음 다시 시작 오류에 zip 파일

의 이름을 변경

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 objFolder 각 objFile 용 (strFilepath)

.파일

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 

최종 하위

다음 파일을 다른 폴더로 이동 다음,

'바르가

희미한 objFSO, objFileCopy는, objFileDelete는 점은, 파일,

희미한 strDestination, 폴더, 하위 폴더를 정보 파일 FTP 위치로 복사 파일을 secury하는 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 

다음

희미한 쉘

셸 설정 = createobject ("wscript.shell")

Shell.run "C : \ testsend.bat"

설정 쉘 = 아무것도

답변

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

+1

SFTP에는 작업 디렉토리라는 개념이 전혀 없습니다. 표준에 따르면 모든 경로는 절대적이어야합니다. 현재 디렉토리 개념을 에뮬레이션하는 것은 클라이언트 소프트웨어입니다. –

+0

@Eugene, 좋은 설명. 나는 대답을 업데이트 할 것이다. 감사. –

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