根据档案名称自动提取并重命名提取的文件

根据档案名称自动提取并重命名提取的文件

我在一个文件夹中有一堆 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调用实际上将文件提取到标准输出 ( -soswitch) 中,并将 stdout 重定向到与 archive 同名的文件(减去扩展名)。修饰符%~n指示 cmd 仅采用基本名称(不带扩展名)

请注意,如果档案中有多个同名文件(在不同的目录中),则可能会产生意外的结果。

如果你将它放入批处理中,那么我还建议将文件名设置为变量(循环之前)以避免重复相关的错误(您需要在上面的命令中输入3次)。

相关内容