0

さまざまなディレクトリにあるたくさんの写真を個別のzipアーカイブにアーカイブするために、しばらく探していました。これまでのところ運がありません。どうして?具体的な要望がいくつかあります。

ディレクトリ構造:

年 => カテゴリ (12 のディレクトリ、毎年同じ) => 各カテゴリには独自のイベントがあります => 各イベントには独自の写真があります。例えば:

2013\

--------カテゴリー1\

--------カテゴリー2\

--------カテゴリー3\

-----------------------サブカテゴリ1\

--------カテゴリー4\

--------カテゴリー5\

--------カテゴリー6\

-----------------------サブカテゴリ1\

-----------------------サブカテゴリ2\

----------------------------------------------Photograph1.jpg

----------------------------------------------Photograph2.jpg

--------カテゴリー7\

等々...

年: 7 ディレクトリ 各年フォルダー内のサブカテゴリー: 12 各サブカテゴリー フォルダー内のサブサブカテゴリー: 100-200 すべてのフォルダー内の写真: 70GB、正確なファイル数はわかりません。

私の質問

サブカテゴリごとに個別の zip アーカイブを作成したいと考えています。問題は次のとおりです。zip アーカイブは 2 つの要求を満たす必要があります。

1) 写真は zip アーカイブのルートに配置する必要があります。zip アーカイブを開くと、最初に表示されるのは写真です。(サブ) ディレクトリはありません。

2) 可能であれば、zip アーカイブはそれぞれ 150 MB のファイルサイズに制限する必要があります。したがって、サブカテゴリに 200 MB の写真が含まれている場合でも、スクリプト/パラメーターでファイルサイズに制限を設定する必要があります。200MB の zip アーカイブを「分割」するだけでなく、実際には 2 つの別個の zip アーカイブを作成します。1 つはサイズが 150 MB で、もう 1 つは 50 MB です。

これは可能でしょうか?スクリプトでファイルをアーカイブする方法はたくさんありますが、いくつか試してみましたが、どれも思い通りに動作しないようです ;-)

したがって... zipアーカイブは、写真以外の同じサブカテゴリに配置する必要があり、それぞれ150MBを超えることはできず、どのファイルを圧縮する必要があるかを理解する必要があります(サブカテゴリ内のサブカテゴリのコンテンツ年カテゴリー内のサブカテゴリー)。

ありがとう!:)

4

1 に答える 1

1

どうぞ。.vbs拡張子を付けて保存してください。私はそれを完全にテストしていませんが、うまくいくはずだと思います。ファイルを含むディレクトリごとに、それらのファイルを同じディレクトリ内のアーカイブに圧縮します。

ああ、そしてSOへようこそ!あなたは新しいので、このリンクを確認してください。

' archive_limit.vbs
' usage: cscript archive_limit.vbs (directory, optional)
' If directory is not supplied, traverse subdirectories of current

on error resume next
if WSH.arguments.count = 0 then
    dir = left(WSH.ScriptFullName,(Len(WSH.ScriptFullName))-(len(WSH.ScriptName)))
else
    dir = WSH.arguments(0)
    if not Right(dir, 1) = "\" then
        dir = dir & "\"
    end if
end if

set fso = createobject("scripting.filesystemobject")
set shl = createobject("shell.application")

EnumFolders(fso.GetFolder(dir))

WSH.Quit 0

Sub EnumFolders(fFolder)
    Set objFolder = fso.GetFolder(fFolder.Path)
    Set colFiles = objFolder.Files
    zipnum = 1
    For Each objFile in colFiles
        zipfile = fFolder.Path & "\archive" & zipnum & ".zip"

        If fso.FileExists(zipfile) Then
            projected = fso.GetFile(zipfile).Size + objFile.Size
            if projected >= 157286400 Then
                zipnum = zipnum + 1
                zipfile = fFolder.Path & "\archive" & zipnum & ".zip"
            End If
        End If

        if not fso.FileExists(zipfile) Then
            set zip = fso.createtextfile(zipfile)
            zip.write "PK" & chr(5) & chr(6) & string(18, chr(0))
            zip.close
        End If

        If Not LCase(fso.GetExtensionName(objFile.name)) = "zip" Then
            ' uncomment the following line to log progress to the console
            ' WSH.Echo "Zipping " & fFolder.Path & "\" & objFile.name & " to " & zipfile
            zipitems = shl.namespace(zipfile).items.count
            shl.namespace(zipfile).copyhere(fFolder.Path & "\" & objFile.name)
            do until shl.namespace(zipfile).items.count > zipitems
                WSH.Sleep 100
            loop
        End If

    Next

    For Each Subfolder in fFolder.SubFolders
        EnumFolders(Subfolder)
    Next
End Sub
于 2013-04-02T19:47:50.690 に答える