批量7-zip压缩,不包括一些文件FOR %% i IN(*。*)

时间:2015-09-13 15:21:49

标签: batch-file compression 7zip

我有这个代码,我在其他帖子上使用7-zip在线发现我想压缩当前文件夹中的所有文件(如果可以添加更好的子文件夹)。目前它的工作原理,但我想排除已经压缩/压缩的文件(例如:.rar,.zip)。

是否有一些语法可以为我排除这一点,即排除特定的扩展名?另外,我不能反过来压缩我想要的扩展名,因为我不知道会遇到什么。

这可以压缩所有文件:

FOR %%i IN (*.*) DO "c:\Program Files\7-Zip\7z.exe" a "%%~ni.7z" "%%i" -mx=9 -ms=on -md=32m -mfb=256

我需要类似的东西:

FOR %%i IN (*.*, *NOT(.zip), NOT(.rar)*) DO "c:\Program Files\7-Zip\7z.exe" a "%%~ni.7z" "%%i" -mx=9 -ms=on -md=32m -mfb=256

答案: 由于@Aacini和@IZB提供的两种解决方案都很有用,我不能选择其中任何一种最好,因为它们都是有效的。

2 个答案:

答案 0 :(得分:1)

试试这个:

@echo off
setlocal EnableDelayedExpansion

rem Define the list of extensions to exclude; it *must* end in dot!
set "exclude=.rar.zip.7z."

rem To include subfolders, just add /R switch to next FOR
FOR %%i IN (*.*) DO (
   if "!exclude:%%~Xi.=!" equ "%exclude%" do (
      rem Remove previous zip file, if any
      del "%%~ni.7z" 2>NUL
      "c:\Program Files\7-Zip\7z.exe" a "%%~ni.7z" "%%i" -mx=9 -ms=on -md=32m -mfb=256
   )
)

答案 1 :(得分:0)

为什么7zip内置了此选项后重新发明轮子?

  

-x [r [ - | 0]]] {@ listfile |!wildcard}:eXclude filenames