我解决了这个问题,请参阅下面的答案。现在我的问题是,如何让它容忍目录名称中带有空格的目录。
我正在寻找一个 7zip 命令行来实现以下功能:我有一个基本文件夹,其中包含许多子文件夹,每个子文件夹包含许多 zip 文件。每个 zip 文件又包含许多文件。像这样:
前:
c:\base\dir1
\dir1\x1.zip
\x1.zip\file1.txt
\z1.zip\file2.txt
\dir1\x2.zip
\x2.zip\file1.txt
\x2.zip\file1.txt
目录:\base\dir2\
\dir2\z1.zip
\z1.zip\file1.txt
\z1.zip\file2.txt
\dir2\z2.zip
\z2.zip\file1.txt
\z2.zip\file2.txt
[对 dir3、dir4...dirn 重复相同的结构]
我想要实现的就是这个。
后:
c:\base\dir1
\dir1\x1
\x1\file1.txt
\x1\file1.txt
\dir1\x2
\x2\file1.txt
\x2\file1.txt
c:\base\dir2\
\dir2\z1
\z1\file1.txt
\z1\file2.txt
\dir2\z2
\z2\file1.txt
\z2\file2.txt
换句话说,每个 zip 文件都已解压到与 zip 文件同名的子文件夹中。这些子文件夹与每个 zip 文件位于同一个文件夹中。
我尝试过这个:
对于 /F "usebackq" %f 在 ( dir /b/a:d
) 中执行 C:\APPS\7-Zip\7z.exe x .%f*.zip -o%f
但是这会将所有解压的文件放在 zip 所在的文件夹中 (x1.zip 解压到 c:\base\dir1,z1.zip 解压到 c:\base\dir2,等等),而不是子文件夹中。不会创建以 zip 文件命名的子文件夹。换句话说:
错误1:
c:\base\dir1
\dir1\file1.txt
\dir1\file2.txt
等等。我也尝试过这个:
for /F "usebackq" %f in (`dir /b/a:d`) do "C:\Program Files\7-Zip\7z.exe" x .\%f\*.zip -o*
现在确实创建了以 zip 文件名称命名的子文件夹,但它们都在 c:\base 中,如下所示:
错误2:
c:\base
\base\x1\file1.txt
\base\x2\file2.txt
ETC。
再次强调,我的目标是:
c:\base
\base\dir1\x1\file1.txt
\base\dir2\z1\file1.txt
抱歉,这篇关于看似相当简单的操作的帖子太冗长了。我真的很难让示例文件夹树的格式看起来正确,所以如果它们让人困惑,请原谅。如果有人知道如何做到这一点,希望使用正确的命令行,我将不胜感激。
答案1
我明白了。这只是:
for /F "usebackq" %f in (`dir /b/a:d`) do "C:\Program Files\7-Zip\7z.exe" x .\%f\*.zip -o%f\*
-o%f* 在 zip 文件所在的文件夹内创建一个以 zip 文件命名的子文件夹。
但还有一个问题,我怎样才能让它容忍目录中有空格?