2012-05-17 3 views
1

나는이 매우 복잡한 요구 사항을 가지고있다.월 및 연도를 기준으로 적절한 폴더로 파일을 이동하려면 어떻게해야합니까?

ftp 서버에서 로컬 디렉토리의 폴더로 zip 파일을 다운로드했습니다.

그런 다음 아래 코드를 사용하여 파일의 압축을 풉니 다.

Set objZip = CreateObject("XStandard.Zip") 

Set FSO = CreateObject("Scripting.FileSystemObject") 
Set fldr = FSO.GetFolder("C:\MUSK\FTP\MainFolder\") 

For Each fil In fldr.Files 
If LCase(Right(fil.Name, 4)) = ".zip" Then 
zipFilePath = fil.Path 
objZip.UnPack zipFilePath, ("C:\MUSK\FTP\Current\") 
End If 
Next 

지금까지는 그렇게 좋았습니다. 문제가 올 경우 여기

이다

이 다운로드 한 파일의 이름 지정 규칙은 다음과 같습니다.

filename_month-day-year.zip

예 : 월 (16), 2012 오늘 가정 할 우리의 요구는

다운로드 한 압축 파일을 잡기 위해

myFile_5-16-2012.zip : 파일 이름은 다음과 같습니다 올바른 폴더에 넣으십시오.

예를 들어 월 및 연도 이름의 폴더가 있습니다.

예 : 우리는

그래서 예를 들어 myFIle_5-16-2012.zip을 고려하여 myFile_5-16-2012.zip이 MAY2012입니다 등 JAN2012, FEB2012을 보유하고 있습니다.

위의 스크립트를 사용하여 myFile_5-16-2012.zip 파일을 가져 와서 해당 폴더에 저장하고 싶습니다. 이 예에서 해당 폴더는 MAY2012 일 것입니다. 그런 다음 압축을 풉니 다.

기본적으로 MonthYear 폴더이 교체됩니다

objZip.UnPack zipFilePath, ("C : \ MUSK \ FTP \ 현재 \") 즉

, 대신에 현재 폴더를 MAY2012 또는 월간 조합이 될 것입니다.

이것이 가능합니까?

나는 분명히 행복 할 것이다. 누군가를 혼란스럽게해서 미안해.

+0

이 질문은 ASP와 관련이 없습니다. 그것은 VBScript의 문자열 파싱에 관한 것입니다. 그에 따라 편집 된 태그입니다. –

+0

네, 죄송합니다. 태그를 적절하게 변경해 주셔서 감사합니다. – Kenny

+0

파일 이름이 당신이 말하는 것처럼 논리가 꽤 간단합니다. '_' 다음에 1 문자를 시작하고'.' 앞에 1 문자를 끝내는 파일 이름 부분을 추출합니다. 이는 날짜 부분입니다. 첫 번째 부분을 숫자 달인 첫 번째'-'까지 그리고 마지막 부분부터 마지막'-'까지 추출합니다 (즉, 연도입니다). 숫자 월을 사용하여 문자열 월 이름을 찾고, 두 달을 결합하여 'MonthYear' 폴더 이름을 만들고, 그것이 존재하는지 확인하십시오. 그렇지 않으면 생성하십시오. 그것을 기본 경로에 추가하고이를'Unpack' 절차에 전달하십시오. :) –

답변

0

이것은 매우 간단합니다. 나는 것 :

  1. 사용 FileSystemObject를가 전체 디렉토리를 통과 폴더 이름은 1 단계가 존재에서 만든 여부를 결정하고,
  2. 필요하다면 만들 적절한 MMMYYYY 형식으로 파일 이름을 변환하는 함수를 만듭니다 여기 FileSystemObject를의 지원 방법 밖으로 당신의 XStandard.Zip 객체는

확인 : http://msdn.microsoft.com/en-us/library/z9ty6h50(v=vs.85).aspx

최소한 .FolderExists.CreateFolder이 필요합니다.


빠른 VBScript를 사용하여 일부 오류 검사 및 기타 등등을 사용할 수 있습니다. 즐기십시오

' parse date, assumes file name is in foo_M-D-YYYY.ext format 
Function parseDate(s) 
    dim dt 
    dt = CDate(split(split(s, "_")(1), ".")(0)) 
    parseDate = Monthname(Month(dt)) & Year(dt) 
End Function 
+0

답변 해 주셔서 감사합니다. 그것은 당신에게 보일지도 모르는 것처럼 정말로 간단하지 않습니다. 다운로드하는 압축 폴더에 날짜가 추가된다는 점을 명심해야합니다. 내 원본 스레드에 표시된 것처럼 일반적인 파일은 myFile_Month-Day-Year와 같은 파일 이름 및 날짜를가집니다. 따라서 파일을 압축 해제 할 폴더를 결정하기 전에 파일 이름에 추가 된 월과 연도를 결정해야합니다. 희망이 의미가 있습니다. – Kenny

+0

@Kenny - 예, 그게 제가 1 단계에서 의미했던 것입니다. 입력 파일 이름 (foo_Jan-1-2012)을 취하는 함수를 만들고, 문자열 조작을 통해 월과 연도를 결정한 다음 MMYYYY 형식으로 반환합니다. 이해가 되니? – Tom

+0

공유 할 수있는 예가 있습니까? – Kenny