3

У меня есть куча zip-файлов в папке. Каждый почтовый файл имеет файл с именем exp_1.txt . Я хотел бы разархивировать каждый zip-файл и переименовать извлеченный файл из каждого zip-файла в имя файла zip.

Имена zip-файлов не соответствуют ни шаблону, ни структуре даты, но отличаются друг от друга. Я выяснил, как получить файл exp_1.txt извлеченный в тот же каталог, что и файл zip, но не могу понять, как переименовать exp_1.txt чтобы соответствовать имени файла, из которого он был извлечен.

Еще раз в нескольких словах: из TuesdayReport.zip я хочу извлечь единственный файл exp_1.txt и переименовать его в TuesdayReport.txt в том же каталоге, что и TuesdayReport.zip .

В настоящее время я использую 7z x для извлечения файла в тот же каталог, в котором находится zip-файл. Я бы предпочел иметь возможность запустить это из командного файла.

3 ответа3

0

почему бы не использовать 7zip версию командной строки, которую вы можете скачать отсюда?

внутри этого zip-файла вы можете найти файл справки в формате CHm, в котором есть все переключатели и команды, которые могут помочь вам в процессе пакетной обработки.

0

Это извлечет файл с именем exp_1.txt из каждого zip-файла в текущем каталоге с именем, аналогичным zip-файлу, но с расширением txt вместо zip расширения:

for %a in (*.zip) do @(7z l "%~a" -ir!exp_1.txt |findstr exp_1.txt) && 7z e "%~a" -ir!exp_1.txt -so >"%~na.txt"

Это должно быть запущено непосредственно из командной строки, если вы хотите запустить его из пакета, вам нужно удвоить %

Что оно делает:

  • цикл for перечисляет каждый zip-файл
  • первый вызов 7z вместе с findstr гарантирует, что извлечение выполняется / файл создается только в том случае, если архив содержит определенный файл
  • Второй вызов 7z фактически извлекает файл в стандартный вывод (ключ -so ) и перенаправляет стандартный вывод в файл с именем, аналогичным архиву (за исключением расширения). Модификатор %~n указывает cmd брать только базовое имя (без расширения)

Обратите внимание: если в архиве несколько файлов с одинаковыми именами (в разных каталогах), это может привести к неожиданным результатам.

Если вы поставите его в пакетном режиме, то я бы также предложил установить имя файла как переменную (до цикла), чтобы избежать ошибок, связанных с повторением (вам нужно ввести его 3 раза в приведенной выше команде).

-1
forfiles /M *.zip /C "cmd /c C:\PROGRA~1\7-Zip\7z.exe e @file & ren exp_1.txt @fname.txt"

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