Единственный способ, которым я знаю, чтобы не допустить включения путей в 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