2016-05-24 3 views
0

私はVBScriptでフォルダの内容を取得し、それをzipにするスクリプトを持っています。私はVBSの専門家ではないので、主に私が別の投稿で見つけたものに基づいています。これは関数です。zipファイルのサイズを制限する

Sub ArchiveFolder (zipFile, sFolder) 
    With CreateObject("Scripting.FileSystemObject") 
     zipFile = .GetAbsolutePathName(zipFile) 
     sFolder = .GetAbsolutePathName(sFolder) 

     With .CreateTextFile(zipFile, True) 
      .Write Chr(80) & Chr(75) & Chr(5) & Chr(6) & String(18, chr(0)) 
     End With 
    End With 

    With CreateObject("Shell.Application") 
     .NameSpace(zipFile).CopyHere .NameSpace(sFolder).Items 

     Do Until .NameSpace(zipFile).Items.Count = _ 
       .NameSpace(sFolder).Items.Count 
      WScript.Sleep 1000 
     Loop 
    End With 
End Sub 

サイズ制限付きファイル(80MB)で分割する必要があります。これを行う方法はありますか?

私が理解しているように、Chr(80) & Chr(75) & Chr(5) & Chr(6) & String(18, chr(0))の部分はZIPファイルを作成するように指示していますが、これが何を意味し、どのようにパラメータ化するかについての説明は見つかりません。

+2

命令 'Chr(80)&Chr(75)&Chr(5)&Chr(6)&String(18) 、chr(6)&String(18、chr(0)) 'は、zipファイルのヘッダです。基本的に、これらの文字だけで新しい "テキスト"ファイルを作成するのは、新しい空のzipファイルを手動で作成する方法です。それについてパラメータ化するものは何もありません。また、アーカイブの最大サイズとは関係ありません。 –

+0

。私は何を考えていたのですか?固定サイズのzipファイルコレクションを生成する他の方法はありますか?プロセスの次のステップにはサイズ制限があるため、大きなプロセスは処理できません。 – jordi

答えて

0

私は最終的に7zipのポータブル版を使用して解決しました。そこに私が必要なパラメータでzipファイルを作成することができます:

Set oShell = CreateObject("WScript.Shell") 
strCmd = "7-Zip\7z.exe a -v80m " & zipFile & " " & sFolder 
oShell.Run(strCmd) 
Set oShell = Nothing 
1

zipファイルのサイズを制限する最も簡単な方法は、最大サイズを超えるまでファイルを追加してから、最後に追加したアイテムを削除することです。

Sub ArchiveFolder (zipFile, sFolder) 
    With CreateObject("Scripting.FileSystemObject") 
     zipFile = .GetAbsolutePathName(zipFile) 
     sFolder = .GetAbsolutePathName(sFolder) 

     With .CreateTextFile(zipFile, True) 
      .Write Chr(80) & Chr(75) & Chr(5) & Chr(6) & String(18, chr(0)) 
     End With 

     Set oZip = .GetFile(zipFile) 
    End With 

    With CreateObject("Shell.Application") 
     cnt = 0 For Each currentItem In .NameSpace(sFolder).Items cnt = cnt + 1 
      .NameSpace(zipFile).CopyHere currentItem 

      Do Until .NameSpace(zipFile).Items.Count = cnt 
       WScript.Sleep 1000 
      Loop 

      If oZip.Size > 83886080 Then Set lastItem = .NameSpace(zipFile).ParseName(f.Name) .NameSpace("C:\temp").MoveHere lastItem Exit For End If 
     Next 
    End With 
End Sub

もちろん、スペース使用率を最適化するためのインテリジェントな戦略はありますが、ここでの答えは広すぎます。

関連する問題