1

Я искал способ массового извлечения zip-файлов в каталоге и извлечения их в отдельные папки на основе их имени zip-файла.

Я нашел: Извлечь все Zip в каталог (включая подпапки) с помощью файла .bat или команды DOS

и: 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 ответ1

0

Не волнуйтесь, я создал скрипт 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .