Windows 批量提取 zip 文件,根据 zip 名称将其放入文件夹中并合并相似的 zip 文件

Windows 批量提取 zip 文件,根据 zip 名称将其放入文件夹中并合并相似的 zip 文件

我一直在寻找一种方法来批量提取目录中的 zip 文件并根据其 zip 文件名将它们提取到单独的文件夹中。

我发现:使用 .bat 文件或 dos 命令提取目录中的所有 Zip 文件(包括子文件夹)

和:https://stackoverflow.com/questions/17077964/windows-batch-script-to-unzip-files-in-a-directory

它可以满足我的要求。但是我意识到我有一些 zip 文件需要解压到同一个目录中。例如:

base dir
|
|
> file.zip
|
> another file.zip
|
> yaf_disk1.zip
|
> yaf_disk2.zip
|
> yaf2_disk1.zip
|
> yaf2_disk2.zip

通过上述操作,我希望将 yaf_disk1 和 yaf_disk2 提取到目录 yaf 中,并将 yaf2_diskX 提取到目录 yaf2 中。

我有一个工作脚本:

for /R "." %%I in ("*.zip") do (
  "%ProgramFiles%\7-Zip\7z.exe" x -y -o"%%~dpnI" "%%~fI" 
)

我从上面的链接中得到了这些信息,我现在基本理解了。我不知道是否可以得到一个批处理文件来查看文件,查看末尾的 diskX,并将所有具有相同名称和 diskX 的文件提取到它从这些文件创建的第一个目录中?

如果这很重要的话,我正在使用 Windows 10。

答案1

别担心,我创建了一个 Python 脚本来帮我完成这件事。如果有人遇到这种情况并需要类似的东西,这是我的代码:

import glob, os, zipfile

zipfiles = glob.glob("*.zip") ## find all files with zip extension in current directory

count = 0 ## current file

while (count < len(zipfiles)):
    print ("Extracting file: "+zipfiles[count])

    zipRef = zipfile.ZipFile(zipfiles[count]) ## make ready for extraction

    directoryToMake = zipfiles[count] ## iniital name for extraction directory

    isMultiDisk = zipfiles[count].find('Disk') ## search for 'Disk' in the directory name and store location

    if (isMultiDisk > 0): ## has found 'Disk' in the name
        print("Multi Disk")
        if (len(directoryToMake[isMultiDisk+4:-4]) < 2): ## checks to see if the disk number is more than 2 characters long
                                                         ## not actually checking the number just the number of characters
                                                         ## to account for some names being DiskA rather than Disk1
            directoryToMake = directoryToMake[:-10] ## remove everything after the Disk to make the clean directory name
        else:
            directoryToMake = directoryToMake[:-11] ## remove extra char for disk numbers of 2 digits
    else: ## disk not found in name
        print("Single Disk")
        directoryToMake = directoryToMake[:-4] ## just remove the .zip at the end

    if not os.path.exists(directoryToMake): ## check if directory exists
        print("Creating Directory: " + directoryToMake)
        os.makedirs(directoryToMake) ## if not make it

    print("Extracting files into directory: " + directoryToMake+ "\n")
    zipRef.extractall(directoryToMake) ## extract into directory

    count += 1

相关内容