Batch file 7-Zip文件夹中的文件

Batch file 7-Zip文件夹中的文件,batch-file,command-line,compression,7zip,Batch File,Command Line,Compression,7zip,我想创建一个批处理文件到.7z,如下所示。因此batch.bat将在根文件夹中执行,并将压缩folder1、folder2、folder3等中的文件,但.7z不会创建文件夹。它只需要压缩文件夹中的文件并创建一个单独的.7z文件,其中包含该文件夹的标题,但不需要创建.7z文件夹 root (batch.bat) folder1 - file1.ext folder2 - file1.ext - file2.ext folder

我想创建一个批处理文件到.7z,如下所示。因此batch.bat将在根文件夹中执行,并将压缩folder1、folder2、folder3等中的文件,但.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"
使用以下命令:

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%\7-Zip\7z.exe" a -t7z -m0=LZMA2 -mx=5 -mmt=ON "%%~dpnxI.7z" ".\*"
    popd
)
由于
7z.exe
似乎存储了相对于当前工作目录的路径,因此我使用
pushd
popd
临时切换到每个迭代的路径

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

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


但是,您的语法无论如何都是错误的:实际上您正在将
PATH
变量设置为
%PATH%;“C:\ProgramFiles\7-Zip”
字面意思,但我想您只是想在其上附加
“C:\Program Files\7-Zip”
,以便编写
PATH%PATH%;“%ProgramFiles%\7-Zip”

代码的意思是这样的吗?对于所有扩展名存储在I中的每个目录,请执行以下指向7z.exe的操作以添加存档,使用.7z扩展名,压缩方法:LZMA2,压缩级别:正常,启用多线程,根据驱动器、路径和文件名创建文件名。不完全确定“%%~fI*”的作用。另外,如果我使用您提供的命令,如果.bat文件进入文件夹,我将如何更改单个文件的命令?因为若我运行它,它也会创建一个7z的.bat…只是修复了一个小问题(请参阅我的);我没有检查你的
7z.exe
命令行选项,我只是复制了它们;除此之外,您还可以这样理解我的代码:对于
根目录
中的每个目录,创建一个
.7z
存档,放置在
根目录
中,命名为目录+
.7z
,包含目录中的所有项目
%%~fI
通过完整路径指向当前迭代的目录…我现在修复了
.7z
存档中存储的路径(请参见我的);此外,我还描述了
根路径
路径…谢谢!如果我将\root*更改为*,那么*不意味着我可以从任何文件夹运行它吗?因为如果我放置绝对路径(“\C:\Users\NATLUF\Desktop\New folder*”),什么都不会发生。所以对于每个目录,我更改绝对路径
(“C:\Users\NATLUF\Desktop\New folder\*”)
?如果我把.bat文件放在目录中,我应该把它改成
(“*”)
,谢谢,这也行!但是我只是想知道批处理文件是否放在folder3目录中,以.7z单独存放文件。上面的代码创建了.bat文件的.7z,以及如何避免这种情况?您在原始帖子中说过批处理文件位于根目录中。为什么会出现在Folder3中?无论如何,您可以使用
-x选项,例如
-x!filename.bat
。我很好奇你为什么接受了不同的答案。我首先发布了我的答案,它是有效的,而且不那么复杂。我搞糊涂了我是怎么问第二个问题的。我的意思是,如果批处理文件在根目录中,并且所有的文件都在根目录中,那么我如何将代码改为.7z,将它们改为.7z,并且仍然包含相同的文件名,并且将批处理文件排除在.7z之外,我想这将是一个不同的问题,需要为它打开另一个问题。感谢您回复如何排除批处理文件。