将所有文件夹压缩到 .7z 目录中的批处理文件(里面没有留下子文件夹!)

将所有文件夹压缩到 .7z 目录中的批处理文件(里面没有留下子文件夹!)

抱歉,这个问题可能之前已经被问过很多次了,但是我正在绞尽脑汁试图修复我的批处理代码,我找不到一个具体的答案来纠正我自己的代码。我有一堆文件夹,我想将它们批量“7z”到 .7z 文件夹中。我不想要一个里面有目录的 .7z 文件夹,我想要文件夹的内容直接放在 .7z 里面。到目前为止,我有:

for /d %%X in (*) do "c:\Program Files\7-Zip\7z.exe" a "%%X.7z" "%%X\"

但它需要调整,因为当我查看 7z 内部时仍然看到子目录。

非常感谢!!!

答案1

我知道的唯一阻止 7z 包含路径的方法是压缩当前文件夹。
使用 -o 选项将输出文件夹定义上一级似乎存在缺陷(尽管如此,它还是在当前文件夹中创建了 7z)。
一种解决方法是进入每个要压缩的文件夹,然后将 7z 文件上移一级:

:: Flat7z.cmd
@Echo off
for /d %%X in (*) do (
    echo processing folder "%%~fX"
    Pushd "%%~fX"
    "c:\Program Files\7-Zip\7z.exe" a "%%~nxX.7z" *
    Move "%%~nxX.7z" ..
    PopD
)

样例树 A:\ 之前

> tree A:\ /F
A:\
└───test
    │   Flat7z.cmd
    ├───a
    │       File1.txt
    │       File2.txt
    └───b
            File3.txt
            File4.txt

运行批处理后:

> tree A:\ /F
A:\
└───test
    │   a.7z
    │   b.7z
    │   Flat7z.cmd
    ├───a
    │       File1.txt
    │       File2.txt
    └───b
            File3.txt
            File4.txt

和(缩短的)7z l *.7z输出

Listing archive: a.7z
   Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
2018-06-25 19:37:39 ....A            6           16  File1.txt
2018-06-25 19:37:43 ....A            6               File2.txt
------------------- ----- ------------ ------------  ------------------------
2018-06-25 19:37:43                 12           16  2 files

Listing archive: b.7z

   Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
2018-06-25 19:37:39 ....A            6           16  File3.txt
2018-06-25 19:37:43 ....A            6               File4.txt
------------------- ----- ------------ ------------  ------------------------
2018-06-25 19:37:43                 12           16  2 files

------------------- ----- ------------ ------------  ------------------------
2018-06-25 19:37:43                 24           32  4 files

Archives: 2
Volumes: 2
Total archives size: 358

答案2

我所寻找的是:

for /D %%d in (*.*) do "C:\Program Files\7-Zip\7z.exe" a -tzip "%%d.zip" ".\%%d\*"

相关内容