2

У меня есть два пакетных сценария Windows, которые оба работают, чтобы найти папку, в которую они помещены, и извлечь каждый файл .rar в папку файлов RAR.

Однако, когда папка использует структуру:

file.part01.rar
file.part02.rar
file.part03.rar  ect..

сценарий захлебывается, пытаясь извлечь из каждого из этих файлов один файл (так как они соответствуют расширению .rar) и предоставляет пользователю файл FileExtract.bla, который уже существует: Перезаписать? (Да нет ? X раз количество частей архива rar (часто 20 или 30 раз).

Я пытался выяснить, как в моем пакетном скрипте сначала отфильтровать любые файлы с расширениями от part02.rar до part99.rar (но не от part01.rar, поскольку это файл, который я действительно хочу извлечь), прежде чем передать его в "" DO "/ команда unrar.

Вот два разных пакетных файла, которые работают одинаково (и одинаково не работают в файлах part02.rar):

@ECHO OFF &SETLOCAL disableDelayedExpansion
SET "sourcefolder=."
FOR /R "%sourcefolder%" %%a IN (*.r*) DO (
    FOR /f "delims=" %%b IN ('echo %%~xa^|findstr /r "\.r.*"') DO
("C:\Program Files\7-zip\7z.exe" x "%%~a")
)

и № 2:

@echo on
FOR /D /r %%F in ("*") DO (
    pushd %CD%  
    cd %%F
       FOR %%X in (*.rar *.zip) DO (
        "C:\Program Files\7-zip\7z.exe" x "%%X"
    )
popd
)

Спасибо

1 ответ1

2

сценарий захлебывается, пытаясь извлечь из каждого из этих файлов один файл (так как они соответствуют расширению .rar) и предоставляет пользователю файл FileExtract.bla, который уже существует: Перезаписать? (Да нет ? X раз количество частей архива rar (часто 20 или 30 раз).

Почему бы просто не передать "N" командам 7z чтобы сказать им, что нужно выбрать "N" для "НЕТ", если оно есть?

Я не уверен, что если эти команды всегда начинаются с соответствующего file.part01.rar , а затем перемещаются в file.part02.rar , file.part03.rar и т.д. В последовательном порядке или действительно важно, чтобы дубликаты файлов извлекали содержимое мудро.

Если автоматизация задерживается только на эту опцию, которая будет выбрана, когда существует проблема, то выбор этой опции "N" автоматически должен позволить извлекать другие файлы и завершать автоматизацию.

Таким образом, проблема заключается в том, что эти файлы RAR с именами файлов .rar части [02-99] извлекают файлы, которые уже существуют, где они извлекаются, поэтому он спрашивает, хотите ли вы перезаписать существующий файл или нет.

Если он сначала извлекает именованные файлы 01, а затем пробует все последующие совпадающие имена файлов, в которых есть конфликт перезаписи файла извлечения, то это должно сработать.

Если это работает так, как ожидалось, тогда это сделало бы минимальное изменение того, что необходимо в логике вашего пакетного скрипта (см. Примеры ниже).

# 1

@ECHO OFF &SETLOCAL disableDelayedExpansion
SET "sourcefolder=."
FOR /R "%sourcefolder%" %%a IN (*.r*) DO (
    FOR /f "delims=" %%b IN ('echo %%~xa^|findstr /r "\.r.*"') DO
(ECHO N | "C:\Program Files\7-zip\7z.exe" x "%%~a")
)

# 2

@echo on
FOR /D /r %%F in ("*") DO (
    pushd %CD%  
    cd %%F
       FOR %%X in (*.rar *.zip) DO (
        ECHO N | "C:\Program Files\7-zip\7z.exe" x "%%X"
    )
popd
)

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