7-压缩文件夹内的文件

7-Zip the files inside of folders

我想创建一个批处理文件到下面的 .7z。因此 batch.bat 将位于执行它的根文件夹中,并将文件压缩到文件夹 1、文件夹 2、文件夹 3 等中,但 .7z 不会创建文件夹。它只需要将文件压缩到文件夹中,并创建一个单独的 .7z 文件,其中包含该文件夹的标题,而不是创建带有文件夹的 .7z。

root (batch.bat)
    folder1
        - file1.ext
    folder2
        - file1.ext
        - file2.ext
    folder3
        - file1.ext
        - file2.ext
        - file3.ext

这是我用来创建 .7z 单个文件的代码。

PATH %%PATH%%;"C:\Program Files-Zip";
FOR %%I IN (*.*) DO 7z.exe a -t7z -m0=LZMA2 -mx=5 -mmt=ON "%%~nI.7z" "%%I"

使用这个:

for /d %%I in ("*") do 7z.exe a -t7z -m0=LZMA2 -mx=5 -mmt=ON "%%I.7z" ".\%%I\*"

您需要一个 for /D 循环来遍历 \root 中的目录,它围绕着 7z.exe 工具,如下所示:

for /D %%I in ("\root\*") do (
    pushd "%%~fI"
    "%ProgramFiles%-Zipz.exe" a -t7z -m0=LZMA2 -mx=5 -mmt=ON "%%~dpnxI.7z" ".\*"
    popd
)

由于 7z.exe 似乎存储了相对于当前工作目录的路径,我暂时使用 pushdpopd.

切换到每个迭代的路径

我建议以绝对方式指定 \root 路径(例如,D:\Data),这样批处理程序就可以在任何地方运行。但是,如果您不想这样,请将 \root\* 部分替换为 *

顺便说一句,在实际使用7z.exe时直接指定路径时不需要path命令,就像我上面所做的那样(使用系统变量%ProgramFiles%而不是它指向的专用目录)。

但是,您的语法无论如何都是错误的:您实际上是将 PATH 变量按字面意思设置为 %PATH%;"C:\Program Files-Zip";,但我想您只是想将 "C:\Program Files-Zip" 附加到它,为什么你需要写 PATH %PATH%;"%ProgramFiles%-Zip".