如何从文本文件中压缩子文件夹列表并在文件名中包含父文件夹名称?

How to zip list of subfolders from text file and include parent folder name in filename?

我有一个 .txt 文件,其中包含生成的非常长的三级文件夹列表,我想压缩每个文件夹的内容。所以一个简化的例子,这将是 list.txt

的内容
F:\Folder05-05-11\[ABC #1] FolderA
F:\Folder05-05-11\[ABC #2] FolderB
F:\Folder05-05-26\[ABC #1] FolderA

如果我这样做

for /F "delims=" %%X in (list.txt) do "7z.exe" a -mx=0 "%%X.zip" "%%X\*"

每个 zip 的文件名只是被压缩的最终目录。所以 [ABC #1] FolderA.zip 等等。所有这些 zip 稍后都会从这个上下文中移出,所以我需要更清楚地命名它们。

在一个绝对理想的世界中,我希望他们采用第二级名称(日期)和来自最后一个文件夹(始终一致)的方括号中的部分。所以 2015-05-11 [ABC #1].zip 但我不知道这在某种程度上是否可行。

因此,看似更简单的选择只是将该父目录包含到 zip 中,所以 2005-05-11 [ABC #1] FolderA.zip,我该怎么做?

显然,我在当前脚本中使用的是 7zip,但如果使用 WinRAR 或其他工具更容易,那很好。

@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "filename1=%sourcedir%\q42060809.txt"
for /F "usebackqdelims=" %%X in ("%filename1%") do (
 FOR /f %%d IN ("%%~dpX.") DO (
  FOR /f "delims=[]" %%b IN ("%%~nX") DO (
   ECHO("7z.exe" a -mx=0 "%%~dpX%%~nxd[%%b].zip" "%%X\*"
  )
 )
)

GOTO :EOF

您需要更改 sourcedir 的设置以适合您的情况。

我使用了一个名为 q42060809.txt 的文件,其中包含您的数据用于我的测试。

所需命令仅ECHO用于测试目的。 在确认命令正确后,移除 ECHO( 以实际压缩文件。

当然,如果不需要 "quote the filename"

,则不需要 usebackq

第 2 步 - 将 . 附加到 %%X~dp 日期和路径部分。 %%~nxd中的结果是最下层目录的Name和eX张力

然后,仅使用 %%X~n (Name) 部分,使用方括号作为分隔符对其进行标记化,因此括号将出现在 %%b

然后混合搭配合适的元素。 Re-insert 如果需要括号,如果符合您的喜好,请在开括号前添加 space...