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

时间:2017-02-06 05:22:23

标签: windows batch-file cmd 7zip winrar

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

F:\Folder\2005-05-11\[ABC #1] FolderA
F:\Folder\2005-05-11\[ABC #2] FolderB
F:\Folder\2005-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等等。所有这些拉链都将在以后移出这个环境,所以我需要更清楚地命名它们。

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

因此看似简单的选项就是将该父目录包含在zip中,所以2005-05-11 [ABC#1] FolderA.zip,我怎么能这样做?

显然我在我当前的脚本中使用7zip,但如果使用WinRAR或其他工具更方便,那就更好了。

1 个答案:

答案 0 :(得分:1)

@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(以实际压缩文件。

当然,如果您没有“引用文件名”

,则不需要usebackq

第2步 - 将.追加到~dp的{​​{1}}日期和路径部分。 %%X中的结果是目录最低级别的 N ame和e X 张力。

然后,仅使用%%~nxd的{​​{1>}( N ame)部分,使用括号作为分隔符来标记它,因此括号之间的部分将显示在{ {1}}

然后混合并匹配适当的元素。如果需要,重新插入支架,如果适合您的喜好,请在开放式支架前添加一个空格......