将多个文件夹中的文件解压到与 zip 同名的文件夹中的子文件夹中

将多个文件夹中的文件解压到与 zip 同名的文件夹中的子文件夹中

我解决了这个问题,请参阅下面的答案。现在我的问题是,如何让它容忍目录名称中带有空格的目录。


我正在寻找一个 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 文件命名的子文件夹。

但还有一个问题,我怎样才能让它容忍目录中有空格?

相关内容