5

次のスクリプト(ちなみに、バッチファイルによって呼び出されています)を使用して、WindowsXPでファイルを解凍しようとしています。

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とFSO.GetParentFolderで問題を解決できます。

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

キリルのコメントを更新します。

「はい」という答えの証拠:

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
于 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 に答える