7-zip - 单独存档中的多个文件夹

7-zip - 单独存档中的多个文件夹

我很可能在这个主题中找到了问题的答案:

如何让 7-zip 处理一大堆文件夹

用户@Enteleform 发布了一条回答还有一个脚本,用于创建批处理文件,将一些文件夹拖放到其中,然后开始为每个文件夹/文件创建存档。它正在工作,但我想更改输出目录。他写道可以在“archivePath”中完成,但我不明白它是如何工作的。

我像这样添加我的输出目录

Set archivePath="E:\test output dir\%%~x.zip"

但我只得到错误:

--------------------------------------------------------
7-Zip 19.00 (x64) : Copyright (c) 1999-2018 Igor Pavlov : 2019-02-21

Scanning the drive: 3 files, 1208464 bytes (1181 KiB)

Creating archive: E:\test output dir\E:\test main dir\Caroline.zip

Add new data to archive: 3 files, 1208464 bytes (1181 KiB)

Error: cannot open file E:\test output dir\E:\test main dir\Caroline.zip
Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch.

System ERROR:
Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch.
--------------------------------------------------------
7-Zip 19.00 (x64) : Copyright (c) 1999-2018 Igor Pavlov : 2019-02-21

Scanning the drive: 31 files, 631241499 bytes (602 MiB)

Creating archive: E:\test output dir\E:\test main dir\pictures.zip

Add new data to archive: 31 files, 631241499 bytes (602 MiB)

Error: cannot open file E:\test output dir\E:\test main dir\pictures.zip
Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch.

System ERROR:
Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch.
--------------------------------------------------------
ERROR @:"E:\test main dir\Caroline\*"
ERROR @:"E:\test main dir\pictures\*"

Drücken Sie eine beliebige Taste . . .

如果我只添加不带 %%~x.zip 的输出目录,它就可以部分工作,这样它会使用正确的输出,但它会创建一个没有名称的 zip 文件。

有人知道哪里出了问题吗?

编辑:这是来自 Enteleform 的原始脚本

@Echo OFF
SetLocal EnableDelayedExpansion



Rem //  7-Zip Executable Path
Set sevenZip="C:\Program Files\7-Zip\7z.exe"



Rem // START: NewLine Variable Hack
Set newLine=^


Rem // END: NewLine Variable Hack !! DO NOT DELETE 2 EMPTY LINES ABOVE !!



Rem //  Set ErrorLog Variables
Set errorCount=0
Set separator=--------------------------------------------------------
Set errorLog=!newLine!!newLine!!separator!!newLine!!newLine!
Set errorPrefix=ERROR @:
Set successMessage=All Files Were Successfully Archived



Rem //  Loop Through Each Argument
SetLocal DisableDelayedExpansion
for %%x in (%*) do (

    Rem //  Use Current Argument To set File, Folder, & Archive Paths
    SetLocal DisableDelayedExpansion
    Set filePath="%%~x"
    Set directoryFiles="%%~x\*"
    Set archivePath="%%~x.zip"
    SetLocal EnableDelayedExpansion

    Rem //  Source Is A Folder
    if exist !directoryFiles! (
            Set sourcePath=!directoryFiles!
    )

    Rem //  Source Is A File
    if not exist !directoryFiles! (
            Set sourcePath=!filePath!
    )

    Rem //  Print Separator To Divide 7-Zip Output
    echo !newLine!!newLine!!separator!!newLine!!newLine!

    Rem //  Add Files To Zip Archive
    !sevenZip! A -TZIP !archivePath! !sourcePath!

    Rem //  Log Errors
    if ErrorLevel 1 (
        Set /A errorCount=errorCount+1
        Set errorLog=!errorLog!!newLine!!errorPrefix!!sourcePath!
    )
)



Rem //  Print ErrorLog
if !errorCount!==0 (
    Set errorLog=!errorLog!!newLine!!successMessage!
)
Echo !errorLog!!newLine!!newLine!!newLine!



Rem //  Keep Window Open To View ErrorLog
pause

我知道这与主题无关,但有人批评“声誉”系统:我想在旧主题中发表评论,但由于声誉系统,我必须创建一个新问题,而不仅仅是在现有问题中发表评论......

您希望我在添加新问题之前查找现有的类似问题,但如果我作为新用户无法回答或评论现有问题,那就没有意义了。

相关内容