我正在寻找一个程序,它将(使用 7zip)包含在文件夹(Recursivly)中的所有文件压缩到存档中,直到存档达到 100MB。无论何时,它都会加入与该文件关联的 .csv 文件,将其删除,创建一个具有下一个编号的新文件,并创建一个新存档。它应该这样做,直到所有文件都存档到存档中(只要所有文件都添加到存档中,数字无关紧要)
我的示例尚未考虑子文件夹中的文件。(是的,必须从某个地方开始)
该示例做了一些反逻辑的事情,一旦发现文件大于 100MB,它就会从存档中删除最后添加的文件。问题是,我不认为批处理可以在创建存档之前评估它的输出,因此这是一种解决方法。通过这种方式,它设法找到存档的大小,然后确定是否可以继续使用,或者是否已完成此存档。
我这样做是因为我们需要最大 100MB 的 zip 文件。如果我得到 10 个或 20 个 .zip 文件并不重要,重要的是没有一个会超过 100MB。之后,我们将使用输出存档并上传它们以将其全部存档。
如您所见,它还将 ECHO 名称、类型、文件、事件添加到较新的文件中,因为 .csv 文件中需要标头。需要将 .csv 文件放入每个存档中,这就是为什么一旦发现 100MB 上限,它会删除最后添加的文件,然后放入 .csv,然后将其删除。
我已经处理了独特的文件大小,它们都不会大于 40MB,只有小于 40MB 的会被考虑。
无论如何,这是我到目前为止所拥有的,但它不想工作,由于某种原因,它在我双击我的 .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。
编辑:我知道可以要求最大文件大小为 7z 并将它们一起压缩,然后它会自动创建多个带有 .001 .002 ... 文件名的档案。但在这种特定情况下,此选项不适用,因为存档不会用于重新创建这些文件,而是用于存档它们(使用 .zip 格式上传)。因此,如果任何文件被分成两个不同的存档,这将导致问题。这也是我想在每个档案中加入一个新的 .csv 的原因。