7压缩文件夹内的文件

时间:2016-05-18 22:36:01

标签: batch-file command-line compression 7zip

我想创建一个.7z的批处理文件,如下所示。所以batch.bat将在它将被执行的根文件夹中,并且将.7z文件夹在folder1,folder2,folder3等文件中,但.7z不会创建一个它只需要.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\7-Zip";
FOR %%I IN (*.*) DO 7z.exe a -t7z -m0=LZMA2 -mx=5 -mmt=ON "%%~nI.7z" "%%I"

2 个答案:

答案 0 :(得分:0)

使用此:

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

答案 1 :(得分:0)

你需要一个for /D循环遍历\root中的目录,这些目录包含在7z.exe工具中,如下所示:

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

由于7z.exe似乎存储了相对于当前工作目录的路径,因此我暂时使用pushdpopd切换到每个迭代路径。

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

顺便说一句,在实际使用path时直接指定路径时不需要7z.exe命令,就像我上面所做的那样(使用系统变量%ProgramFiles%而不是专用无论如何它指向的目录)。但是,您的语法无论如何都是错误的:您实际上是将PATH变量设置为%PATH%;"C:\Program Files\7-Zip";字面上,但我想您只是想将"C:\Program Files\7-Zip"附加到它,因为您需要写{ {1}}。