我在一个文件夹中有一堆 zip 文件。每个 zip 文件都有一个名为 的文件exp_1.txt
。我想解压每个 zip 文件,并将从每个 zip 文件中提取的文件重命名为 zip 文件的名称。
zip 文件的名称不遵循任何模式或日期结构,但都是不同的。我已经弄清楚了如何将文件exp_1.txt
解压到与 zip 文件相同的目录中,但无法弄清楚如何重命名exp_1.txt
以匹配它解压的 zip 文件的名称。
再次用更少的词来表达:TuesdayReport.zip
我想从中提取唯一的文件exp_1.txt
并将其重命名为TuesdayReport.txt
与 相同的目录中的TuesdayReport.zip
。
目前我正在使用7z x
将文件提取到 zip 文件所在的同一目录。我希望能够从批处理文件运行它。
答案1
为什么不使用 7zip 命令行版本,你可以从这里?
在这个 zip 文件中,您可以找到一个 CHm 格式的帮助文件,其中包含可以在批处理过程中为您提供帮助的所有开关和命令。
答案2
forfiles /M *.zip /C "cmd /c C:\PROGRA~1\7-Zip\7z.exe e @file & ren exp_1.txt @fname.txt"
答案3
这将从当前目录中的每个 zip 文件中提取名为的文件exp_1.txt
,其名称与 zip 文件相同,但扩展名txt
不同zip
:
for %a in (*.zip) do @(7z l "%~a" -ir!exp_1.txt |findstr exp_1.txt) && 7z e "%~a" -ir!exp_1.txt -so >"%~na.txt"
这是直接从命令行运行的,如果你想从批处理中运行它,你需要双击%
它能做什么:
for
循环枚举每个 zip 文件- 第一次
7z
调用并findstr
确保提取运行/仅当档案包含特定文件时才生成文件 - 第二次
7z
调用实际上将文件提取到标准输出 (-so
switch) 中,并将 stdout 重定向到与 archive 同名的文件(减去扩展名)。修饰符%~n
指示 cmd 仅采用基本名称(不带扩展名)
请注意,如果档案中有多个同名文件(在不同的目录中),则可能会产生意外的结果。
如果你将它放入批处理中,那么我还建议将文件名设置为变量(循环之前)以避免重复相关的错误(您需要在上面的命令中输入3次)。