2013-03-25 3 views
3

내가 Windows XP에서 파일의 압축을 (그것은 그런데, 배치 파일에 의해 호출되는 것) 다음 스크립트를 사용하려고 해요 :VBScript를 상대 경로

strZipFile ="C:\test.zip"      'name of zip file 
outFolder = "C:\"        'destination folder of unzipped files 

Set objShell = CreateObject("Shell.Application") 
Set objSource = objShell.NameSpace(strZipFile).Items() 
Set objTarget = objShell.NameSpace(outFolder) 
intOptions = 256 
objTarget.CopyHere objSource, intOptions 

문제는 내가 사용하려는 경우입니다 그것은 내가 zip 파일의 전체 경로를 알지 못할 것입니다, 내가 아는 것은 VBScript와 같은 폴더에있을 것입니다. 그래서 그것을 염두에두고, 그것을 호출 할 수 있습니까? 상대 경로? 예 : 물론 내가 그 것 그 라인을 따라 뭔가를 의미하므로, (그것은 오류 " 'objShell.NameSpace (...)'필요한 개체"제공)하지만이 예제는 작동하지 않습니다

strZipFile ="test.zip" 

작업.

>> p = CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName) 
>> 
>> WScript.Echo p 
>> 
M:\bin 

업데이트 WRT 키릴의 코멘트 :

Option Explicit 

Class cX 
    Private Sub Class_Initialize() 
    WScript.Echo "Class_Initialize" 
    End Sub 
    Private Sub Class_Terminate() 
    WScript.Echo "Class_Terminate" 
    End Sub 
    Public Function f() 
    f = "qed" 
    End Function 
End Class 

WScript.Echo 1 
Dim f : f = (New cX).f() 
WScript.Echo 2 
WScript.Echo f 

출력 : 대답 "예"에 대한

증거

답변

8

WScript.ScriptFullName 및 FSO.GetParentFolder가 문제를 해결해야한다 :

cscript 15621395.vbs 
1 
Class_Initialize 
Class_Terminate 
2 
qed 
+0

당신은 내 문제를 해결, 감사합니다! – ShizukaSM

+0

FSO 개체는 범위를 벗어나므로 즉시 처리됩니까? – Kiril

+1

@Kiril - 예, 업데이트를 참조하십시오. –

3

이 당신에게 zip 파일의 전체 경로를 얻어야한다 :

strZipFile ="test.zip" 
dim fso, fullPathToZip 
set fso = CreateObject("Scripting.FileSystemObject") 
fullPathToZip = fso.GetAbsolutePathName(strZipFile) 
+0

+1 답변도 유효하고 이전 답변과 다릅니다. 감사합니다! – ShizukaSM

+0

@ShizukaSM 고양이를 대본 작성하는 방법에는 여러 가지가 있습니다! : D – Keen

+3

GetAbsolutePathName은 상대 경로를 현재 디렉터리에 상대적인 것으로 해석하지만 @ Ekkehard.Horner의 솔루션은 스크립트를 기준으로 상대 경로로 간주합니다. 항상 같을 수는 없지만 항상 같은 것은 아닙니다. – peterchen