Vista用にファイルをZip形式に自動圧縮するVBScriptを記述
Vista用にファイルをZip形式に自動圧縮するVBScriptを記述しました。
しかし、ソースコードに待ち時間"WScript.Sleep(500)"を挿入しないとなぜか圧縮に失敗します。
待ち時間を設定することで圧縮に失敗する現象が起こりにくくなりますが、動作が完全に安定させることができません。意味無く待ち時間を長くするのは問題ですし、かといって適切な待ち時間を決める合理的根拠も見つかりません。できれば待ち時間以外の方法で確実に処理する方法を採用したい。
質問1 上記の現象が起こる原因は?
質問2 より適切な回避策(待ち時間を設定しなくても確実に処理する方法)はありますか?
以下のソースコードはVisual Basicでは無くVBScriptです
option explicit
' ********************************************
' ファイルを自動圧縮するVBScript
' *********************************************
' 宣言
Dim ID
Dim inpFolder
Dim outFolder
' フォルダー名とファイル名を定義します。
' 保存対象や保存先を変更する時は下の4行を修正します
ID = "XXXXX"
inpFolder = "c:\temp1\"
outFolder = "c:\temp2\"
CreateFolder outFolder
CreateZip (inpFolder & "a_" & ID & ".nsf") , (outFolder & "a_" & ID & ".zip")
CreateZip (inpFolder & "l_" & ID & ".nsf") , (outFolder & "l_" & ID & ".zip")
Stop
' フォルダーが無ければ作成します
Sub CreateFolder(source)
Dim fso
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
If Fso.FolderExists(source) = False Then
fso.CreateFolder(source)
End If
End Sub
' zipファイルを作成します。
Sub CreateZip(source , target)
Dim fso
Dim sa
' 空のファイルを作成します。
Set fso = CreateObject("Scripting.FileSystemObject")
With fso.CreateTextFile(target)
.Write "PK" & Chr(5) & Chr(6) & String(18,0)
.Close
End With
' 圧縮データを書き込みます。
Set sa = CreateObject("Shell.Application")
With sa.NameSpace(target)
.CopyHere source
' 下のWscript.Sleep(500)をコメントアウトすると圧縮が失敗する
WScript.Sleep(500)
End With
End Sub