Я пытался использовать утилиту командной строки WinRAR rar.exe, но она всегда сначала создает архив, а затем удаляет исходный файл после того, как архив уже создан.
По сути, я пытаюсь добавить несколько больших файлов в один архив, но мне не хватает свободного места.
Что происходит на самом деле:
Чего я надеюсь достичь:
Есть ли способ сделать это?
Да, есть способ, но я обязательно прислушаюсь к совету Кена Уайта! стандартный способ самый безопасный. В любом случае, чтобы безопасно (!?) сделать это по-своему, вы можете сделать это в цикле: добавить файл во временный архив, скопировать временный архив в конечное место (перезаписать предыдущий), удалить файл в случае успеха; чтобы в случае чего у вас были уже обработанные файлы в финальном архиве; хотя этот подход будет медленным; единственным преимуществом может быть максимальное количество занимаемого места на диске, в зависимости от достижимой степени сжатия, количества файлов...
Приведенный ниже пакетный файл можно использовать для перемещения одного файла за другим в указанной исходной папке в архив RAR.
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "SourceFolder=C:\Temp"
for /F "eol=| delims = " %%I in ('dir "%SourceFolder%\*" /A-D /B 2^>nul') do "%ProgramFiles%\WinRAR\Rar.exe" m -cfg- -ep -idcdp -m4 -y -- "%SourceFolder%\Archiv.rar" "%SourceFolder%\%%I" || goto CreationError
goto EndBatch
:CreationError
echo/
pause
:EndBatch
endlocal
Но я сомневаюсь, что это действительно полезно для вас, если недостаточно места для хранения, чтобы создать файл архива с большими файлами один за другим. Rar.exe
должен создать временную копию существующего файла архива при обновлении существующего файла архива с добавлением еще одного файла, что, скорее всего, снова приведет к состоянию нехватки свободного места для хранения.
Удаление файла сразу после его добавления невозможно без запуска двух процессов. Первый процесс запускается Rar.exe
как отдельный процесс, но построчно захватывает свой вывод и удаляет файл, добавленный Rar.exe
в архив, в то время как Rar.exe
работает как отдельный процесс. Но я думаю, что этого невозможно добиться с помощью командного файла.
Я предлагаю использовать инструмент Запустить от имени администратора Windows Очистка диска и использовать его для удаления всех файлов, которые больше не нужны. Очистка Центра обновления Windows, предлагаемый инструментом Windows Очистка диска, при запуске от имени администратора обычно освобождает несколько гигабайт дискового пространства в этом инструменте очистки, который никогда раньше не запускался. После ручного выполнения необходимой перезагрузки Windows, хотя и не отображается, что перезагрузка Windows необходима для завершения Очистка Центра обновления Windows, удалите вручную от имени администратора все папки и файлы в папке %SystemRoot%\SoftwareDistribution\Download
(пакеты обновлений безопасности Windows уже установлены после перезагрузки Windows и иногда не удаляются автоматически, как это должно быть всегда выполняется Центром обновления Windows) и в папке %SystemRoot%\Temp
(папка временных файлов системных процессов), чтобы получить еще больше свободного места для хранения. Пожалуйста, дождитесь перезагрузки Windows, пока снова не отобразится рабочий стол Windows, даже если 100% готовности отображается более часа. Microsoft забыла включить процесс удаления файлов в процентное обозначение и по какой-то неизвестной причине требует очень много времени для удаления тысяч файлов, которые больше не нужны из-за того, что они уже заменены более новыми обновлениями безопасности Windows. Обратите внимание, что выполнение Очистка Центра обновления Windows, которое никогда раньше не выполнялось, может занять несколько часов, особенно в Windows 8/8.1/10, где это всегда занимает гораздо больше времени, чем в Windows 7.
Наконец, очистите также файловый кеш (ы) используемого интернет-браузера (ов), чтобы получить больше свободного места для хранения при запуске уже из свободного места для хранения.
Что произойдет, если что-то остановит процесс (например, закончится свободное место на диске) и архив не может быть создан, а файлы уже удалены?