2013-03-25 546 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 

问题是,在那里我打算使用我不知道压缩文件的完整路径,我只能知道它将与VBScript位于同一个文件夹中,因此,考虑到这一点,是否可以使用相对路径?例如:

strZipFile ="test.zip" 

这个例子没有工作,虽然(它给出了一个错误“所需的对象:‘objShell.NameSpace(...)’”),所以当然我的意思是沿着这些线路的那会事工作。

回答

8

WScript.ScriptFullName和FSO.GetParentFolder应该解决您的问题:

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

输出:

cscript 15621395.vbs 
1 
Class_Initialize 
Class_Terminate 
2 
qed 
+0

你解决我的问题,谢谢! – ShizukaSM 2013-03-25 18:12:52

+0

FSO对象是否立即处置,因为它超出了范围? – Kiril 2015-03-25 17:04:26

+1

@Kiril - 是的,请参阅更新。 – 2015-03-25 17:18:21

3

这应该让你的zip文件的完整路径:

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

+1由于您的答案也是有效的,与上一个不同,谢谢! – ShizukaSM 2013-03-25 18:13:10

+0

@ShizukaSM有不止一种方法来编写猫! :D – Keen 2013-03-25 18:19:36

+3

请注意GetAbsolutePathName将解释相对于当前目录的相对路径,而@ Ekkehard.Horner的解决方案假定它相对于脚本。它们可以但不总是相同的。 – peterchen 2013-12-05 10:49:16