我有一个.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或其他工具更方便,那就更好了。
答案 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}}
然后混合并匹配适当的元素。如果需要,重新插入支架,如果适合您的喜好,请在开放式支架前添加一个空格......