5

我正在尝试使用以下脚本(顺便说一下,它被批处理文件调用)在 Windows XP 中解压缩文件:

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 位于同一个文件夹中,因此,考虑到这一点,我会可以用相对路径调用它吗?例子:

strZipFile ="test.zip" 

不过,这个例子不起作用(它给出了一个错误“需要对象:'objShell.NameSpace(...)'”),所以我的意思当然是那些可以工作的东西。

4

3 回答 3

10

WScript.ScriptFullName and FSO.GetParentFolder should solve your problem:

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

Update wrt Kiril's comment:

Evidence for the answer "Yes":

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

output:

cscript 15621395.vbs
1
Class_Initialize
Class_Terminate
2
qed
于 2013-03-25T18:00:49.580 回答
6

这应该为您提供 zip 文件的完整路径:

strZipFile ="test.zip" 
dim fso, fullPathToZip
set fso = CreateObject("Scripting.FileSystemObject")
fullPathToZip = fso.GetAbsolutePathName(strZipFile)
于 2013-03-25T18:09:33.777 回答
1

当发生“找不到文件错误”时,在您尝试通过相对路径从脚本目录(或其子文件夹)读取数据文件的情况下,通常的问题是假设当前目录是脚本目录。根据脚本的启动方式,当前目录可能是 C:\Windows\System32(WScript.exe、CScript.exe、MSHTA.exe 的位置)或调用脚本的任何目录(例如,如果从另一个脚本运行)或通过命令行)。

以下代码使用与接受的答案相同的方法将当前目录设置为脚本的目录(第 4 行)。完成后,您可以通过相对路径可靠地读取数据文件。如果数据文件位于脚本目录的子文件夹中,则需要一个点前缀(例如“.\data\myfile.txt”)。如果数据文件在脚本目录中,则根本不需要前缀,但我通常使用“.\”。

Const ForReading = 1
Set oWSH = CreateObject("WScript.Shell")
Set oFSO = CreateObject("Scripting.FileSystemObject")
oWSH.CurrentDirectory = oFSO.GetParentFolderName(WScript.ScriptFullName)
DataFile = ".\myfile.txt"
Set oFile = oFSO.OpenTextFile(DataFile,ForReading)
Data = oFile.ReadAll
oFile.Close
WScript.Echo Data
于 2021-11-20T03:42:49.900 回答