Arquivos zip de extração em lote do Windows, em pastas com base no nome do zip e combinação de zips semelhantes

1

Eu tenho procurado uma maneira de extrair arquivos zip em massa em um diretório e extraí-los em pastas individuais com base no nome do arquivo zip.

Eu encontrei: Extraia todos os Zip's em um diretório (incl. subpastas) com um arquivo .bat ou um comando dos

e: link

que faz o que eu queria. No entanto, percebi que tenho alguns arquivos zip que precisam ser extraídos para o mesmo diretório. Por exemplo:

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

Com o acima, gostaria que yaf_disk1 e yaf_disk2 fossem extraídos para um diretório yaf e yaf2_diskX para o diretório yaf2.

Eu tenho um script de trabalho:

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

que recebi dos links acima que eu principalmente (agora!) entendo. Não sei se é possível obter um arquivo de lote para ver o arquivo, ver o diskX no final e extrair todos os arquivos com o mesmo nome e diskX no primeiro diretório criado a partir desses arquivos?

Estou trabalhando com o Windows 10, se isso for de alguma importância.

    
por smartroad 24.07.2016 / 10:00

1 resposta

0

Não se preocupe, criei um script Python que fez isso para mim. Se alguém se deparar com isso e precisar de algo semelhante, aqui está o meu código:

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
    
por 24.07.2016 / 14:36