我有一个.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或其他工具更容易的话,那就好了。
发布于 2017-02-06 05:50:19
@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-将.附加到%%X的~dp日期和路径部分。%%~nxd的结果是Name和eX张力最低的目录。
然后,只使用~n (Name)部分的%%X,使用括号作为分隔符对其进行令牌化,因此括号之间的部分将出现在%%b中。
然后混合并匹配适当的元素。如果需要的话,重新插入括号,如果这符合你的喜好,在打开的支架前再加一个空格.
https://stackoverflow.com/questions/42060809
复制相似问题