Вопрос или проблема
Просто перейдите к корню диска, на котором находятся эти папки, и выполните, например:
E:
cd\
"C:\Program Files\7-Zip\7z.exe" a E:\elec\teste11.7z *.*
И вы увидите, как он анализирует $RECYCLE.BIN и его подпапки. То же самое происходит, если у вас есть папка found.000. Какого черта это? Почему он думает, что я хочу это сжать?
Использование не рекурсивного ключа -r- абсолютно ничего не меняет, кстати, никакие другие папки на корневом диске не сжимаются, только Корзина и Found.000, так что я не говорю ему делать рекурсию по всему диску.
Я также не использую ключ рекурсивного сжатия для конкретных папок -ir!.
Я просто хочу сжать все файлы (только файлы), находящиеся в корневом диске.
Кто-нибудь знает, почему 7zip сжимает эти 2 и только эти 2 папки? Я не могу быть единственным, кто заметил это, но мои поиски в интернете ничего не принесли. Поскольку никакие другие папки не сжимаются, будь то скрытые или нет, я предполагаю, что это ошибка в 7zip, которая имеет эти 2 папки закодированными для чего-то, и как-то она их сжимает.
Буду благодарен за любую помощь.
Примечание: Я понимаю, что могу просто исключить эти папки с помощью -x!E:\$RECYCLE.BIN -x!E:\found.000
, но мне не следовало бы добавлять это для обхода ошибочного программирования или добавлять свои исключения в другие пакетные файлы.
Почему он думает, что я хочу это сжать?
Вы указали шаблон подстановки *.*
, который соответствует именам FOUND.000
и $RECYCLE.BIN
, так что вы явно сказали 7z сжать эти два элемента по имени.
Поскольку нет смысла сжимать саму директорию, единственное разумное действие, которое 7z может предпринять, получив имя директории через командную строку, — это сделать рекурсию хотя бы на один уровень в эту директорию, независимо от других параметров.
Так что если вы не хотите, чтобы 7z сжимал некоторые из элементов, соответствующих вашему шаблону подстановки, вам нужно будет исключить их индивидуально, используя -x
или указать шаблон, который не соответствует таким именам.
Ответ или решение
Согласно описанию вашей проблемы, использование команды 7-Zip для сжатия файлов в корне диска с параметром "." ведет к неожиданным результатам — программа включает в процесс сжатия папки $RECYCLE.BIN и found.000. Давайте рассмотрим причины этого поведения и возможные решения.
Причины поведения 7-Zip
-
Шаблон именования: Когда вы используете шаблон ". ", вы фактически указываете 7-Zip обрабатывать все элементы в указанной директории. Папки $RECYCLE.BIN и found.000 соответствуют этому шаблону, так как они имеют специфические расширения файлов и включены в общий набор элементов, которые нужно обработать. Это может привести к тому, что программа попытается рекурсивно обойти их содержимое.
-
Рекурсивная обработка: 7-Zip работает по принципу "рекурсивного обхода" папок, когда к нему обращаются с каталогами. Несмотря на использование ключа -r-, который обычно отключает рекурсивную обработку, в вашем случае это не сработало, поскольку $RECYCLE.BIN и found.000 обрабатываются как вложенные элементы в результате базового шаблона .. Это может вызвать путаницу, поскольку программа и по умолчанию предполагает, что при указании папки вы хотите обработать и ее содержимое.
-
Конфликт команд: У вас возникла проблема из-за парадоксального взаимодействия между выбранными параметрами. Параметр -ir! облачает специфическую обработку отдельных папок, однако в вашем случае это не применяется. Это может указывать на то, что в программах сжатия, таких как 7-Zip, могут быть предусмотрены внутренние исключения для определенных директорий.
Как решить проблему
-
Исключение папок: Самый простой способ избежать сжатия ненужных папок — использовать аргумент исключения. Это означает, что вам нужно будет добавить к вашей команде следующие параметры:
-x!E:\$RECYCLE.BIN -x!E:\found.000
Это решение прямо указывает 7-Zip не обрабатывать данные директории, что может быть уместно, если вы часто используете команду.
-
Изменение шаблона: Вы также можете попробовать использовать более специфичный шаблон, который не будет соответствовать именам этих папок. Например:
"C:\Program Files\7-Zip\7z.exe" a E:\elec\teste11.7z E:\*
Это обеспечит обработку только верхнего уровня и исключит вложенные папки.
Заключение
Ваше недовольство поведением 7-Zip вполне обоснованно, особенно если программное обеспечение ведет себя не так, как ожидается. Важно помнить, что указание шаблона файлов, равно как и рекурсивная обработка, могут вводить неожиданные результаты. Рекомендуем использовать исключения или корректировать шаблон, чтобы добиться желаемого результата. Если проблема по-прежнему сохраняется, возможно, целесообразно обратиться к поддержке 7-Zip для получения готового решения или следующей версии с исправлениями.