0

我一直在寻找一段时间,将不同目录中的大量照片存档到单独的 zip 存档中。到目前为止没有运气。怎么会?我有一些具体要求;

目录结构:

YEAR => 类别(12 个目录,每年相同)=> 每个类别都有自己的活动 => 每个活动都有自己的图片。例如:

2013\

--------类别1\

--------类别2\

--------第三类\

-----------------------子类别1\

--------Category4\

--------Category5\

--------6类\

-----------------------子类别1\

-----------------------子类别2\

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

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

--------第7类\

等等...

年份:7 个目录每年文件夹中的子类别:12 每个子类别文件夹中的子子类别:100-200 所有文件夹中的照片:70GB,不知道具体有多少文件。

我的问题

我想为每个子类别创建单独的 zip 存档。问题是: zip 档案必须满足 2 个请求:

1) 照片必须放在压缩包的根目录下。当您打开 zip 存档时,您首先要看到的是照片。没有(子)目录。

2) 如果可能,每个 zip 档案的文件大小必须限制为 150mb。因此,即使子类别包含 200mb 的照片,脚本/参数也必须对文件大小设置限制。不仅仅是“拆分”一个 200mb 的 zip-archives,而是真正制作 2 个单独的 zip-archives。一个大小为 150mb,另一个为 50mb。

这可能吗?有很多方法可以通过脚本归档文件,我确实尝试了一些,但它们似乎都没有按照我希望的方式工作;-)

所以...除了照片之外,zip-archives 必须放在同一个子类别中,每个不能超过 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 回答