2

Я сожалею, что, возможно, об этом уже много раз спрашивали, но я рву волосы, пытаясь исправить свой пакетный код, и я не могу найти конкретный ответ, который я могу использовать, чтобы исправить свой собственный код. У меня есть куча папок, которые я хочу пакетировать "7z" в папки .7z. Я не хочу папку .7z с каталогом внутри, я хочу содержимое папки прямо внутри .7z. Пока что у меня есть:

for /d %%X in (*) do "c:\Program Files\7-Zip\7z.exe" a "%%X.7z" "%%X\"

Но его нужно настроить, так как я все еще вижу подкаталоги, когда смотрю в 7z.

Большое спасибо!!!

2 ответа2

2

Единственный способ, которым я знаю, чтобы не допустить включения путей в 7z, - это сжать текущую папку.
Кажется, есть недостаток при использовании опции -o для определения выходной папки на один уровень вверх (тем не менее она создает 7z в текущей папке).
Обходной путь - войти в каждую папку, чтобы сжать, а затем переместить файл 7z на один уровень вверх:

:: Flat7z.cmd
@Echo off
for /d %%X in (*) do (
    echo processing folder "%%~fX"
    Pushd "%%~fX"
    "c:\Program Files\7-Zip\7z.exe" a "%%~nxX.7z" *
    Move "%%~nxX.7z" ..
    PopD
)

Образец дерева A:\ before

> tree A:\ /F
A:\
└───test
    │   Flat7z.cmd
    ├───a
    │       File1.txt
    │       File2.txt
    └───b
            File3.txt
            File4.txt

и после запуска партии:

> tree A:\ /F
A:\
└───test
    │   a.7z
    │   b.7z
    │   Flat7z.cmd
    ├───a
    │       File1.txt
    │       File2.txt
    └───b
            File3.txt
            File4.txt

И (сокращенный) выход 7z l *.7z

Listing archive: a.7z
   Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
2018-06-25 19:37:39 ....A            6           16  File1.txt
2018-06-25 19:37:43 ....A            6               File2.txt
------------------- ----- ------------ ------------  ------------------------
2018-06-25 19:37:43                 12           16  2 files

Listing archive: b.7z

   Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
2018-06-25 19:37:39 ....A            6           16  File3.txt
2018-06-25 19:37:43 ....A            6               File4.txt
------------------- ----- ------------ ------------  ------------------------
2018-06-25 19:37:43                 12           16  2 files

------------------- ----- ------------ ------------  ------------------------
2018-06-25 19:37:43                 24           32  4 files

Archives: 2
Volumes: 2
Total archives size: 358
-1

Что я искал:

for /D %%d in (*.*) do "C:\Program Files\7-Zip\7z.exe" a -tzip "%%d.zip" ".\%%d\*"

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