Я посмотрел на первую версию отличного решения MC ND и сам подумал, что произойдет, если в архиве случайно, хотя и очень маловероятно, каталог с именем some-data.txt
?
Ответ заключается в том, что этот каталог со всеми файлами и подкаталогами также удаляется, поскольку он также указан в Rar.exe
, а findstr
не отфильтровывает запись списка в каталоге, так как он выглядит точно так же, как запись имени файла в пустом списке.формат.
Решение для кода, написанного MC ND , заключается в использовании команды Rar lb
с переключателем -ed
для фильтрации записей каталога при выводе списка,Это небольшое изменение было применено к командной строке MC ND в его ответе.
Затем я подумал об использовании переключателей -ed
и -x"..."
для фильтрации каталогов и имен файлов, которыене следует удалять при запуске Rar.exe
с помощью команды d
и шаблона some-data.txt
с подстановочными знаками.
А вот решение с одной строкой:
"C:\Program Files\WinRAR\Rar.exe" d -ed -x"some-data.txt?*" -- "C:\full\path\testing.rar" "some-data.txt*"
Звездочка в концеимя файла необходимо для удаления всех файлов с именем some-data.txt
внутри архива, включая файлы в подкаталогах.
Переключатель -ed
исключает все каталоги в архиве, включая те, которые случайно названы some-data.txt
.Каталоги в архиве, начинающиеся с some-data.txt
и с дополнительными символами, добавленными как каталог с именем some-data.txt_dir
, автоматически игнорируются Rar.exe
с шаблоном подстановочного имени используемого файла.
Переключатель -x"some-data.txt?*"
приводит к исключению файловначиная с some-data.txt
и добавляя больше символов, таких как some-data.txt1
и some-data.txt10
.Имена файлов, такие как first_some-data.txt
, автоматически игнорируются Rar.exe
с использованием шаблона подстановки имени используемого файла.
Переключатель -cl
для преобразования имен файлов в нижний регистр игнорируется Rar при использованиикоманда d
и поэтому не используется в командной строке выше. Rar интерпретирует имена файлов без учета регистра, как Windows.
Обновление:
Евгений Рошаль, владелец win.rar GmbH, сказал мнеОтправить по электронной почте более простой способ удаления файла в корневой папке архива и во всех подпапках:
"C:\Program Files\WinRAR\Rar.exe" d "C:\full\path\testing.rar" "some-data.txt" "*\some-data.txt"
Эта командная строка удаляет только some-data.txt
в корневой папке архива (последний, кроме одного аргумента) и во всех ее подпапках (последний аргумент).Файлы в папке с именем some-data.txt
не удаляются этой командной строкой, но пустая папка с именем some-data.txt
также удаляется из архива.Переключатель -ed
может использоваться дополнительно для предотвращения удаления пустой папки some-data.txt
.