如果文件共享名称的第一部分,则将它们压缩在一起

问题描述 投票:0回答:1

我的文件夹中有大量文件,如果它们的名称有共同的开头(无论扩展名是什么),我想将它们压缩在一起。

以下是 3 个文件的示例:

“战后 (1989)(动态)(第 1 盘,共 2 盘)(cr Replicants).st”

“战后 (1989)(动态)(磁盘 2 of 2)(cr Replicants).st”

“战后(1989)(动态)(cr Replicants).m3u”

我想将它们压缩到一个名为 m3u 文件的 zip 文件中。

我试图有一个for循环来查看每个m3u,停止查看第二个闭括号之后的名称的其余部分,然后将该m3u与任何其他具有相同名称开头部分的文件一起压缩(名称的一部分,直到第二个右括号)。

阅读有关此事的其他主题后,这是我迄今为止的批处理脚本:

For %%i in (*)*)*.m3u) do For /F "tokens=2delims=)" %%B in ("%%i") Do ("C:Program Files\7-Zip\7z.exe" -mx9 a "%%~ni.zip" "%%i" "%%B*.*")

这会生成一个具有正确名称的 zip 文件,并将 .m3u 文件放入其中,但不会放入其他 2 个扩展名为 .st 的文件。

任何人都可以帮我修复我的语法,以便脚本按预期工作吗?

for-loop batch-file substring 7zip
1个回答
0
投票

您的原始批处理脚本存在错误,并且它没有按照您的建议运行。也许您在粘贴时犯了一些转录错误!

无论如何,您指定了您需要的内容,所以我可以据此进行工作。

您在构建批处理文件时似乎犯了一些常见错误:

  • 不要尝试将所有内容都放在一条线上
  • 分块开发命令

第一部分是测试外循环:

for %%i in (*^(*^)^(*^)^(*^)*.m3u) do (
   echo %%i
)

在继续之前,我花了几次时间才获得正确的文件模式

%%i
。 下一阶段是构建内循环:

for %%i in (*^(*^)^(*^)^(*^)*.m3u) do (
    for /f "tokens=1-3delims=)" %%B  in ("%%i") do (
      echo Zip: %%~~ni.zip Files: "%%B)%%C)*%%D).*"
   )
)

还需要进行几次尝试才能获得正确的标记和正确的模式。然后我们可以构建 zip 命令:

for %%i in (*^(*^)^(*^)^(*^)*.m3u) do (
    for /f "tokens=1-3delims=)" %%B  in ("%%i") do (
       "C:\Program Files\7-Zip\7z.exe" -mx9 a "%%~ni.zip" "%%B)%%C)*%%D).*"
       )
)

这就是你想要的吗?

当我运行它时我得到这个:

C:\ ("C:\Program Files\7-Zip\7z.exe" -mx9 a "Af
ter the war (1989)(Dynamic)(cr Replicants).zip" "After the war (1989)(Dynamic)*(
cr Replicants).*" )

7-Zip [64] 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
Scanning

Creating archive After the war (1989)(Dynamic)(cr Replicants).zip

Compressing  After the war (1989)(Dynamic)(cr Replicants).m3u
Compressing  After the war (1989)(Dynamic)(Disk 1 of 2)(cr Replicants).st
Compressing  After the war (1989)(Dynamic)(Disk 2 of 2)(cr Replicants).st

Everything is Ok
© www.soinside.com 2019 - 2024. All rights reserved.