抱歉,这个问题可能之前已经被问过很多次了,但是我正在绞尽脑汁试图修复我的批处理代码,我找不到一个具体的答案来纠正我自己的代码。我有一堆文件夹,我想将它们批量“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\*"