# 关于7Z批次（批处理）压缩如何压缩超过100档案上限?

**URL:** <https://meta.appinn.net/t/topic/65102>\
**Category:** 问题求助\
**Tags:** windows\
**Created:** [2025 年1 月 9 日 12:47 UTC](https://meta.appinn.net/t/topic/65102 "2025-01-09T12:47:27Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

作者： ![ot1686](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/ot1686/32/53543_2.png) [@ot1686](https://meta.appinn.net/u/ot1686)\
发布日期： [2025 年1 月 9 日 12:47 UTC](https://meta.appinn.net/t/topic/65102/1 "2025-01-09T12:47:27Z")

</div>

请问各位大佬…小弟在使用下面7Z压缩批次（批处理文件）…只要遇到超过100档案（100个文件）左右就无法压缩（可能是超过字元的限制）…有什么办法修改一下小弟的批次让它能解除这个限制呢??先谢谢各位大佬了 👍

```auto
@echo off
setlocal ENABLEDELAYEDEXPANSION
set "ZIP=D:\TOOLS\7-zip x64\7z.exe"
set pwd=123
chcp 65001
set "params=!cmdcmdline:~0,-1!"
set "params=!params:*" =!"
set count=0
for %%G IN (!params!) do (
  set /a count+=1
  set "item_!count!="%%~G""
)
for /L %%n in (1,1,!count!) DO (
  set "source=!item_%%n:~1,-1!"
  for %%A in ("!source!") do set "filename=%%~nA"
  set "archive=!filename!.7z"
  if exist "!source!\" (
    "%ZIP%" a -t7z "!archive!" "!source!\*" -scsUTF-8 -p"%pwd%" -mhe=on -mx0 -xr^^!desktop.ini -xr^^!Thumb.db
  ) else if exist "!source!" (
    "%ZIP%" a -t7z "!archive!" "!source!" -scsUTF-8 -p"%pwd%" -mhe=on -mx0
  ) else (
    echo !source! does not exist.
	pause
	exit
  )
)
endlocal
exit

```

---

<div class="post-metadata">

作者： ![haitao](https://meta-edge.appinn.com/letter_avatar_proxy/v4/letter/h/958977/32.png) [@haitao](https://meta.appinn.net/u/haitao)\
发布日期： [2025 年1 月 9 日 12:56 UTC](https://meta.appinn.net/t/topic/65102/2 "2025-01-09T12:56:08Z")

</div>

需要这么高级/复杂的使用方法？  
直接\*.\*，最多排除某些文件类型  
再特殊的，先收集到文件列表，再@filelistxxx.txt

---

<div class="post-metadata">

作者： ![RachelSherman](https://meta-edge.appinn.com/letter_avatar_proxy/v4/letter/r/74df32/32.png) [@RachelSherman](https://meta.appinn.net/u/RachelSherman)\
发布日期： [2025 年1 月 9 日 14:50 UTC](https://meta.appinn.net/t/topic/65102/3 "2025-01-09T14:50:39Z")

</div>

参数太长的话，先写到临时文件，再从`@files.txt`读取吧

---

<div class="post-metadata">

作者： ![ot1686](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/ot1686/32/53543_2.png) [@ot1686](https://meta.appinn.net/u/ot1686)\
发布日期： [2025 年1 月 9 日 22:09 UTC](https://meta.appinn.net/t/topic/65102/4 "2025-01-09T22:09:18Z")

</div>

大佬该怎么做??@filelistxxx.txt小弟没试过再麻烦您了… :laughing:

---

<div class="post-metadata">

作者： ![ot1686](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/ot1686/32/53543_2.png) [@ot1686](https://meta.appinn.net/u/ot1686)\
发布日期： [2025 年1 月 9 日 22:10 UTC](https://meta.appinn.net/t/topic/65102/5 "2025-01-09T22:10:55Z")

</div>

大佬您的方法应该也跟haitao HaitaoSoft该怎么做??@files.txt小弟没试过再麻烦您了…

---

<div class="post-metadata">

作者： ![3\_5105](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/3_5105/32/57748_2.png) [@3\_5105](https://meta.appinn.net/u/3_5105)\
发布日期： [2025 年1 月 10 日 10:22 UTC](https://meta.appinn.net/t/topic/65102/6 "2025-01-10T10:22:41Z")

</div>

filelist.txt文件内容示范

```auto
C:\1.TXT
C:\2.DAT

```

命令行

```auto
7z a archive.7z -i@filelist.txt

```

---

<div class="post-metadata">

作者： ![hzhbest](https://meta-edge.appinn.com/letter_avatar_proxy/v4/letter/h/e9a140/32.png) [@hzhbest](https://meta.appinn.net/u/hzhbest)\
发布日期： [2025 年1 月 10 日 10:34 UTC](https://meta.appinn.net/t/topic/65102/7 "2025-01-10T10:34:19Z")

</div>

楼主的批处理是将投进去的每个项目（文件或文件夹）都压缩成单独的7z文件  
7z -i 后面接的参数是文件列表，也就是只会压缩成一个7z文件

---

<div class="post-metadata">

作者： ![ot1686](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/ot1686/32/53543_2.png) [@ot1686](https://meta.appinn.net/u/ot1686)\
发布日期： [2025 年1 月 10 日 10:47 UTC](https://meta.appinn.net/t/topic/65102/8 "2025-01-10T10:47:16Z")

</div>

是的…谢谢大佬帮忙解译…也谢谢 3\_5105 大佬

---

<div class="post-metadata">

作者： ![3\_5105](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/3_5105/32/57748_2.png) [@3\_5105](https://meta.appinn.net/u/3_5105)\
发布日期： [2025 年1 月 10 日 13:29 UTC](https://meta.appinn.net/t/topic/65102/9 "2025-01-10T13:29:22Z")

</div>

啊…抱歉，没认真看  
我认为这个问题是在用%%G获取参数时导致的，所以将文件名称从命令行传入改为从list.txt传入：

> **点击查看折叠的代码**
>
> ```auto
> @echo off
> setlocal ENABLEDELAYEDEXPANSION
> set "ZIP=D:\TOOLS\7-zip x64\7z.exe"
> set pwd=123
> chcp 65001
> set "listfile=list.txt"
> if not exist "!listfile!" (
> echo List file does not exist.
> pause
> exit
> )
> 
> for /f "tokens=*" %%G in (!listfile!) do (
> set "source=%%G"
> for %%A in ("!source!") do set "filename=%%~nA"
> set "archive=!filename!.7z"
> if exist "!source!\" (
> "%ZIP%" a -t7z "!archive!" "!source!\*" -scsUTF-8 -p"%pwd%" -mhe=on -mx0 -xr^^!desktop.ini -xr^^!Thumb.db
> ) else if exist "!source!" (
> "%ZIP%" a -t7z "!archive!" "!source!" -scsUTF-8 -p"%pwd%" -mhe=on -mx0
> ) else (
> echo !source! does not exist.
> pause
> exit
> )
> )
> endlocal
> exit
> 
> ```

---

<div class="post-metadata">

作者： ![haitao](https://meta-edge.appinn.com/letter_avatar_proxy/v4/letter/h/958977/32.png) [@haitao](https://meta.appinn.net/u/haitao)\
发布日期： [2025 年1 月 10 日 14:18 UTC](https://meta.appinn.net/t/topic/65102/10 "2025-01-10T14:18:17Z")

</div>

```auto
dir /b xxx\*.* > filelistxx.txt
dir /b yy\zzz\*.* >> filelistxx.txt

```

---

<div class="post-metadata">

作者： ![ot1686](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/ot1686/32/53543_2.png) [@ot1686](https://meta.appinn.net/u/ot1686)\
发布日期： [2025 年1 月 10 日 19:19 UTC](https://meta.appinn.net/t/topic/65102/11 "2025-01-10T19:19:10Z")

</div>

谢谢大佬的用心…但…运行跟原本的一样…一样…超过100应该说超过我猜的啦长度限制8191个字符所以都闪退… :sob:

---

<div class="post-metadata">

作者： ![ot1686](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/ot1686/32/53543_2.png) [@ot1686](https://meta.appinn.net/u/ot1686)\
发布日期： [2025 年1 月 10 日 19:20 UTC](https://meta.appinn.net/t/topic/65102/12 "2025-01-10T19:20:27Z")

</div>

大佬可有完整代码…非常的感谢您的回覆… 👍

---

<div class="post-metadata">

作者： ![3\_5105](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/3_5105/32/57748_2.png) [@3\_5105](https://meta.appinn.net/u/3_5105)\
发布日期： [2025 年1 月 10 日 23:30 UTC](https://meta.appinn.net/t/topic/65102/13 "2025-01-10T23:30:13Z")

</div>

您可以提供具体的参数和部分文件目录结构嘛

---

<div class="post-metadata">

作者： ![ot1686](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/ot1686/32/53543_2.png) [@ot1686](https://meta.appinn.net/u/ot1686)\
发布日期： [2025 年1 月 11 日 05:08 UTC](https://meta.appinn.net/t/topic/65102/14 "2025-01-11T05:08:25Z")

</div>

大佬因为小弟的这个批处理文档是放在shell:sendto里的只要选取想要压缩的文档 “传送至” 就可以了 所以任何目录都OK… 👍

---

<div class="post-metadata">

作者： ![3\_5105](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/3_5105/32/57748_2.png) [@3\_5105](https://meta.appinn.net/u/3_5105)\
发布日期： [2025 年1 月 11 日 07:39 UTC](https://meta.appinn.net/t/topic/65102/15 "2025-01-11T07:39:33Z")

</div>

啊…您的要求稍微有点高，我这边用您的思路可以到三百个文件名。但是Windows的命令行最长长度有一个定死的8192字符限制，所以对于海量文件名，批处理在启动前连参数都无法获取。故可能需要编写插件以完成任务  
比较简单的解决办法：

需要WinRAR

> **[【方法分享】WinRAR批量压缩文件到每个单独的文件夹的操作\_winrar能将多个文件压缩成一个单独的压缩文件-CSDN博客](https://blog.csdn.net/asupersoft/article/details/138958298)**
>
> 文章浏览阅读1.5k次，点赞9次，收藏4次。WinRAR批量压缩文件到每个单独的文件夹的操作\_winrar能将多个文件压缩成一个单独的压缩文件

需要360压缩

> **[360压缩如何设置每个文件到单独压缩包-百度经验](https://jingyan.baidu.com/article/49711c617ea300bb441b7cb4.html)**
>
> 360压缩如何设置每个文件到单独压缩包,360压缩如何设置每个文件到单独压缩包？接下来分享具体的详细步骤和操作方法。

以上方法在右键两千余个文件/文件夹进行分别压缩时工作良好。另外，上面的软件均有绿色版本可用

比较复杂的解决办法：  
如果您要求必须使用7zip，不允许使用其他软件，则可能需要自行编写一个右键菜单插件来完成任务

---

<div class="post-metadata">

作者： ![ot1686](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/ot1686/32/53543_2.png) [@ot1686](https://meta.appinn.net/u/ot1686)\
发布日期： [2025 年1 月 11 日 07:45 UTC](https://meta.appinn.net/t/topic/65102/16 "2025-01-11T07:45:38Z")

</div>

大佬…这…我也会…Bandzip也做的到…需要软件的我都不需要… :laughing:

---

<div class="post-metadata">

作者： ![3\_5105](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/3_5105/32/57748_2.png) [@3\_5105](https://meta.appinn.net/u/3_5105)\
发布日期： [2025 年1 月 11 日 08:13 UTC](https://meta.appinn.net/t/topic/65102/17 "2025-01-11T08:13:16Z")

</div>

对了，忘记问了，您的系统具体是？  
Windows2000到Windows10、Windows9x、Windows11的右键菜单编写方式不尽相同

---

<div class="post-metadata">

作者： ![ot1686](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/ot1686/32/53543_2.png) [@ot1686](https://meta.appinn.net/u/ot1686)\
发布日期： [2025 年1 月 11 日 08:36 UTC](https://meta.appinn.net/t/topic/65102/18 "2025-01-11T08:36:58Z")

</div>

win10

就单一个目录下的文件…大概四五百的文件…因为不想使用软件完成…所以才想用BAT完成…软件…winrar bandzip我都会…只是想说能不能使用BAT就能完成…谢谢大佬您的回覆…

---

<div class="post-metadata">

作者： ![3\_5105](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/3_5105/32/57748_2.png) [@3\_5105](https://meta.appinn.net/u/3_5105)\
发布日期： [2025 年1 月 11 日 12:13 UTC](https://meta.appinn.net/t/topic/65102/19 "2025-01-11T12:13:52Z")

</div>

嗯…暂时先提出一个折中方案，以UTF16编码保存vbs脚本到sendto文件夹，目前它可处理的数量应该在主贴中批处理的五倍左右

> **vbs脚本**
>
> ```auto
> ' 获取命令行参数
> Dim args, file, sevenZipPath, destination, shell
> 
> ' 7-Zip 可执行文件路径
> sevenZipPath = "D:\TOOLS\7-zip x64\7z.exe"
> 
> ' 创建 WScript.Shell 对象
> Set shell = CreateObject("WScript.Shell")
> 
> ' 获取传入的命令行参数
> Set args = WScript.Arguments
> 
> ' 遍历每个参数
> For Each file In args
> destination = Replace(file, Right(file, Len(file) - InStrRev(file, ".")), ".7z")
> Dim command
> command = """" & sevenZipPath & """ a -t7z """ & destination & """ """ & file & """"
> shell.Run command, 0, True
> Next
> Set shell = Nothing
> 
> ```

稍后可能会有更优解将提交到帖子中，这样方便后续坛友查看

---

<div class="post-metadata">

作者： ![3\_5105](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/3_5105/32/57748_2.png) [@3\_5105](https://meta.appinn.net/u/3_5105)\
发布日期： [2025 年1 月 11 日 15:35 UTC](https://meta.appinn.net/t/topic/65102/20 "2025-01-11T15:35:59Z")

</div>

好！完美解决  
下载压缩包，点击inst.bat注册dll  
[https://wwgz.lanzouw.com/b00mp1i2ni](https://wwgz.lanzouw.com/b00mp1i2ni)  
密码:8pt9

* * *

以MIT协议开放源码，github：

> **[GitHub - 3-5105/7zADP: 为7-zip添加“压缩每个文件到单独的压缩包”的右键菜单](https://github.com/3-5105/7zADP)**
>
> 为7-zip添加“压缩每个文件到单独的压缩包”的右键菜单

* * *

第一次写Windows文件资源管理器扩展，还是踩了很多坑…  
不适合您也没关系！可以为之后搜索到我们帖子的坛友提供便利

[下一页](https://meta.appinn.net/t/topic/65102.md?page=2)
