Как удалить файлы при создании архива сразу после добавления в архив?

Я пытался использовать утилиту командной строки WinRAR rar.exe, но она всегда сначала создает архив, а затем удаляет исходный файл после того, как архив уже создан.

По сути, я пытаюсь добавить несколько больших файлов в один архив, но мне не хватает свободного места.

Что происходит на самом деле:

  1. File1 добавлен в архив x.rar
  2. Файл2 добавлен в архив x.rar
  3. Файл3 добавлен в архив x.rar
  4. Файл1 удален
  5. Файл2 удален
  6. Файл3 удален

Чего я надеюсь достичь:

  1. File1 добавлен в архив x.rar
  2. Файл1 удален
  3. Файл2 добавлен в архив x.rar
  4. Файл2 удален
  5. Файл3 добавлен в архив x.rar
  6. Файл3 удален

Есть ли способ сделать это?

Что произойдет, если что-то остановит процесс (например, закончится свободное место на диске) и архив не может быть создан, а файлы уже удалены?

Ken White 08.04.2019 19:56

Да, есть способ, но я обязательно прислушаюсь к совету Кена Уайта! стандартный способ самый безопасный. В любом случае, чтобы безопасно (!?) сделать это по-своему, вы можете сделать это в цикле: добавить файл во временный архив, скопировать временный архив в конечное место (перезаписать предыдущий), удалить файл в случае успеха; чтобы в случае чего у вас были уже обработанные файлы в финальном архиве; хотя этот подход будет медленным; единственным преимуществом может быть максимальное количество занимаемого места на диске, в зависимости от достижимой степени сжатия, количества файлов...

aschipfl 09.04.2019 18:50
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
1 146
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Приведенный ниже пакетный файл можно использовать для перемещения одного файла за другим в указанной исходной папке в архив 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.

Наконец, очистите также файловый кеш (ы) используемого интернет-браузера (ов), чтобы получить больше свободного места для хранения при запуске уже из свободного места для хранения.

Другие вопросы по теме