Я ищу, чтобы создать программу, которая будет zip (используя 7zip) все файлы, содержащиеся в этой папке (Recursivly), в архив до тех пор, пока архив не достигнет 100 МБ. Всякий раз, когда это происходит, он присоединяется к CSV-файлу, связанному с файлом, удаляет его, создает новый со следующим номером, а также создает новый архив. Он должен делать это до тех пор, пока все файлы не будут заархивированы в архив (число не имеет значения до тех пор, пока все файлы, добавленные в архив)Batch Make 100MB Archive max со всеми файлами, содержащимися в папке (Рекурсивный)
Мой пример не рассматривает файлы внутри подпапок. (да, нужно что-то начинать)
Пример делает что-то немного контр-логическое, он удаляет последний добавленный файл из архива, как только он видит, что он больше 100 МБ. Проблема в том, что я не думаю, что пакет может оценить вывод архива перед его созданием, поэтому это немного обходное решение. Таким образом, ему удается найти размер архива, а затем определить, нормально ли идти, или если это было сделано с этим.
Я делаю это, потому что нам нужны файлы ZIP, максимальные 100 МБ. Не имеет значения, если я получаю 10 или 20 .zip-файлов, это имеет значение только для того, чтобы ни один бюст 100 МБ. После этого мы будем использовать выходные архивы и загружать их, чтобы архивировать все это.
Как вы можете видеть это также ECHO Name, Type, File, Event в новый файл, потому что заголовки требуются в CSV-файле. Необходимо вставить файл .csv в каждый архив, и именно поэтому, когда он видит колпачок в 100 МБ, он удаляет последний добавленный файл, а затем помещает его в .csv, а затем удаляет его.
Я уже позаботился о уникальном размере файла, ни один из них не будет больше 40 МБ, и будут рассмотрены только те, которые меньше 40 МБ.
Во всяком случае, это то, что я до сих пор, но он не хочет работать, по какой-то причине он закрывает как можно скорее после того, как я дважды щелкните мой .bat
SET /a modif=1
SET "file=importationinfo"
SET "reqext=.csv"
ECHO Name,Type,File,Event> %file%%modif%%reqext%
FOR %%a IN (*.*) DO (
IF NOT %%~zi GTR 40999999 (
IF /i NOT "%%~nxa"=="%~nx0" (
IF /i NOT "%%~nxa"=="%file%%modif%%reqext%" (
FOR /f "delims=" %%b IN ("%%~dpa\.") DO (
>>"%file%%modif%%reqext%" ECHO "%%~nxa","4","\%%~nxa","%ID%"
"C:\Program Files\7-Zip\7z.exe" a -tzip Import%modif%.zip "%%~nxa"
FOR /F %%i IN ("Import%modif%.zip") DO SET "size=%%~zi"
ECHO %size%
IF %size% GTR 104857599 (
ECHO Bigger than 104857599
REM This Echo is only for debugging
"C:\Program Files\7-Zip\7z.exe" d -tzip Import%modif%.zip "%%~nxa"
PAUSE
"C:\Program Files\7-Zip\7z.exe" a -tzip Import%modif%.zip "%file%%modif%%reqext%"
DEL %file%%modif%%reqext%
SET /a modif+=1
ECHO Name,Type,File,Event> %file%%modif%%reqext%
) ELSE (
ECHO NOT 100MB YET
>>"%file%%modif%%reqext%" ECHO "%%~nxa","4","\%%~nxa","%ID%")
)
)
)
)
)
Это все. Надеюсь, вы, ребята, можете мне помочь. Спасибо. J-P.
EDIT: Я знаю, что можно запросить максимальный размер файла до 7z и закрепить их все вместе, и он автоматически создаст несколько архивов с именами .001 .002 ... filenames. Но в этом конкретном случае эта опция не в порядке, поскольку архивы не будут использоваться для воссоздания этих файлов, но для их архивирования (загрузка с использованием формата .zip). Поэтому, если любые файлы разбиты на два разных архива, это вызовет проблемы. Вот почему я хочу присоединиться к новому CSV в каждом архиве.
Если вы используете 'Winrar', вы можете установить размер файла в командной строке. – Endoro
В настоящее время я не могу использовать Winrar для этого конкретного случая. И я также могу указать максимальный размер с 7z, но он может нарезать файл пополам. Я не хочу этого. – Quardah
Вы можете использовать '7za a -v100m" архив "" filemask "'! В противном случае удачи! – Endoro