Удалите все файлы с расширением txt в папках и подпапках home box root

Обновлено: 03.07.2024

Я хочу удалить все файлы из структуры папок, поэтому я остался с пустой структурой папок.

Может ли это быть достигнуто в сценариях batch или VBScript ?

Я попробовал очень базовую командную команду, но это потребовало от пользователя разрешить удаление каждого файла. Это не было подходящим решением, так как существует много сотен файлов, и это со временем будет увеличиваться.

Что вы можете предложить?

Это можно сделать, используя PowerShell :

Эта команда получает каждый дочерний элемент в $path , выполняет метод удаления на каждом из них и довольно быстро. Структура папок остается нетронутой.

Если у вас могут быть файлы без расширения, используйте

Похоже, что после PowerShell v2 может быть добавлен параметр -File . Если это так, то

Он должен делать трюк для файлов с расширением.

Вы можете сделать это с помощью команды del :

Переключатель /S должен рекурсивно удалять только файлы.

Короткий и пакет PowerShell. Не уверен, что самая низкая версия PS, с которой он будет работать.

Чтение между строками в исходном вопросе, я могу предложить альтернативную строку кода BATCH, которую вы можете использовать. То, что это будет делать при запуске, - это удалить только файлы старше 60 дней. Таким образом вы можете поместить это в запланированное задание, и когда он запускается, он удаляет лишние файлы, которые вам не нужны, а не удаляет весь каталог. Вы можете изменить 60-5 дней или даже 1 день, если хотите. Это не удаляет папки.

Используйте PowerShell для удаления одного файла или папки, прежде чем приступать к выполнению команды Delete powershell, нам необходимо убедиться, что вы вошли на сервер или ПК с учетной записью, которая имеет полный доступ к объектам, которые вы хотите удалить.

Remove-Item -Path "C: \ dotnet-helpers \ DummyfiletoDelete.txt"

Вышеупомянутая команда выведет и удалит файл «DummyfiletoDelete.txt», который присутствует в местоположении «C: \ dotnet-helpers».

Remove-Item -Path "C: \ dotnet-helpers *. *" -recurse

Recurse сверлит вниз и находит больше файлов. Параметр -recurse позволяет PowerShell удалять любые дочерние элементы без запроса разрешения. Кроме того, параметр -force может быть добавлен для удаления скрытых или файлов только для чтения.

Использование команды -Force для полного удаления файлов

Remove-Item -Path "C: \ dotnet-helpers *. *" -Force

Попробуйте использовать PowerShell. В этом примере я хочу удалить все .class файлы:

В проводнике Windows выберите корневой каталог, содержащий все файлы и папки.

Сортировка по типу (все папки будут сверху и все перечисленные ниже файлы)

Выберите все файлы и нажмите «Удалить».

Это приведет к удалению всех файлов и сохранению структуры каталогов.

Удалите все файлы из текущего каталога и подкаталогов, но оставив структуру папок.

( /Q ) предназначен для запроса пользователю, может ли он удалить

Предостережение : попробуйте без /Q , чтобы убедиться, что вы не удаляете ничего ценного.

Это самый простой способ IMO

Откройте PowerShell, перейдите в каталог ( cd ), THEN

(Poof) все прошло .

Если вы хотите удалить на основе определенного расширения

ls перечисляет каталог

-Recurse - флаг, указывающий powershell, чтобы войти в любые подкаталоги

* говорит все

*.doc все с расширением .doc

| подать вывод слева направо

rm удалить

Все остальные ответы, похоже, делают это более запутанным, чем необходимо.

Если файл защищен от записи, вам будет предложено подтвердить ее, как показано ниже. Чтобы удалить файл введите y и нажмите Enter. В противном случае, если файл не защищен от записи, он будет удален без запроса.

Вы также можете использовать подстановочный знак ( *) и регулярные выражения для соответствия нескольким файлам. Например, чтобы удалить все файлы с расширением .pdf в текущем каталоге, используйте следующую команду:

Когда вы используете rm с wildcards ( *) и регулярными расширениями, рекомендуется перечислить файлы с помощью команды ls, чтобы вы могли видеть, какие файлы будут удалены перед запуском команды rm.

Как удалить каталоги (папки)

  • Для удаления пустого каталога используйте эту опцию -d.rm -d dirname
  • Чтобы удалить непустые каталоги и все файлы внутри них, используйте параметр r (рекурсивный).rm -r dirname

Если каталог или файл в каталоге защищены от записи, вам будет предложено подтвердить удаление.

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

Как удалить каталог Linux





Такая команда уже позволяет удалить непустой каталог Linux. Но, можно по-другому, например, если вы хотите вывести информацию о файлах, которые удаляются:

rm -Rfv моя_папка

rm -Rfv /var/www/public_html

Теперь вы знаете как удалить непустой каталог в консоли linux, далее усложним задачу, будем удалять папки, которые содержат определенные слова в своем имени:


Подробнее про команду find смотрите в отдельной статье. Если кратко, то -type d указывает, что мы ищем только папки, а параметром -name задаем имя нужных папок. Затем с помощью параметра -exec мы выполняем команду удаления. Таким же образом можно удалить только пустые папки, например, в домашней папке:

/ -empty -type d -delete

Как видите, в find необязательно выполнять отдельную команду, утилита тоже умеет удалять. Вместо домашней папки, можно указать любой нужный вам путь:

find /var/www/public_html/ -empty -type d -delete

Перед удалением вы можете подсчитать количество пустых папок:

find /var/www/public_html/ -empty -type d | wc -l


Если вы хотите полностью удалить папку Linux, так, чтобы ее невозможно было восстановить, то можно использовать утилиту wipe. Она не поставляется по умолчанию, но вы можете ее достаточно просто установить:

sudo apt install wipe

Теперь для удаления каталога Linux используйте такую команду:

Как удалить каталог в linux через терминал

Как удалить пустую папку в Linux через терминал

Если вам нужно удалить пустую папку в Linux через терминал, то для этого проще всего использовать команду rmdir. Данная команда используется для удаления пустых папок из файловой системы Linux. Каталоги с файлами или другими каталогами данная команда не удаляет.

Синтаксис команды rmdir выглядит следующим образом:

Разберем доступные параметры подробней:

Для того чтобы просто удалить пустую папку нужно ввести «rmdir foldername». Где «foldername» это название удаляемого объекта. При желании можно удалить сразу несколько папок, для этого достаточно перечислить их через пробел.

удаление пустых папок в Linux

Если необходимо удалить каталог, в котором есть другие каталоги (без файлов), то можно воспользоваться параметром «-p». Для этого нужно ввести «rmdir -p» и указать полный путь. Например, если в каталоге folder1 есть другой каталог folder2, то мы можем удалить их сразу одной командой «rmdir -p folder1/folder2».

удаление дерева пустых папок в Linux

При использовании параметра «-v» в консоль будет выведена подробная информация о процессе удаления каталогов.

удаление пустых папок с выводом информации

А при использовании параметра «ignore-fail-on-non-empty» команда будет игнорировать ошибки, которые будут возникать при попытке удаления непустых каталогов.

удаление пустых папок с игнорированием ошибок

Нужно отметить, что также существует команда «mkdir», которая предназначена для создания папок и обладает точно таким же синтаксисом.

создание папок в Linux

С ее помощью вы можете создать папки по одной или целым деревом (при использовании параметра «-p»).

Как удалить папку с содержимым (с файлами) в Linux

Если нужно удалить папку с каким-то содержимым, например, с файлами, то тут уже нужно использовать команду «rm». Данная Linux команда предназначена для удаления файлов, но с ее помощью можно удалять и каталоги, если использовать параметр «-r», который включает рекурсивное удаление.

Синтаксис команды rm выглядит следующим образом:

Разберем основные параметры команды rm:

Для удаления папок с файлами нам нужно использовать параметр «-r». Введите «rm -r» и укажите название папки, которую нужно удалить. Например, если у нас есть каталог folder1 с какими-то файлами, то мы можем ее удалить, введя команду «rm -r folder1»

удаление папок с файлами в Linux

Если необходимо, чтобы удаление папок сопровождалось запросом, то вместе с параметром «-r» можно использовать параметр «-i». В этом случае каждая операция, которую будет выполнять команда, будет требовать разрешения пользователя. При этом команда для удаления папки folder1 будет выглядеть как «rm -ri folder1».

удаление папок с файлами и запросом к пользователю

Обратите внимание, во всех примерах предполагается, что удаляемый объект находится в текущей папке. Но, при необходимости вы можете удалять каталоги используя полный путь.

удаление папок с выводом информации

Например, вы можете указать «rm -rv /home/aleks/folder1» для того, чтобы удалить папку folder1 с выводом подробной информации.

Как удалить все файлы в папке Linux

В некоторых случаях может возникнуть необходимость удалить все файлы в папке при этом не удаляя саму папку. Для решения такой задачи можно использовать вот такую команду «rm -rf /path/to/directory/*». Данная команда удалит все файлы и папки (рекурсивно удалит все содержимое) по указанному пути.


Если же нужно удалить все файлы в папке, но оставить вложенные папки, то это можно сделать командой «rm -f /path/to/directory/*».


Альтернативный вариант — это удаление самой папки со всем содержимым (включая скрытые файлы и каталоги) и повторное ее создание.


Для этого подойдет команда «rm -rf foldername && mkdir foldername».

Удаление всей директории со всеми вложенными файлами и директориями командой rm

В повседневной работе гораздо чаще приходится удалять не пустые директории, и тут на на помощь приходит команда rm. К примеру, удалить все содержимое директории letters можно командой (Осторожно! удаление без подтверждения):

  • -r – указывает что нужно производить удаление рекурсивно, т.е. пройтись по всему списку файлов и папок и попытаться удалить каждую из них.
  • -f — удаление без запроса его подтверждения.

Дополнительная информация о командах rmdir и rm

Чтобы получить дополнительную информацию по этим командам, Вы всегда можно воспользоваться следующей стандартной командой-справочником-подсказкой-документацией:

Почему существует две различные команды для одной операции?

Казалось бы, а зачем создавать отдельную команду для удаления только пустых директорий, если можно воспользоваться rm? Но, вдумавшись, понимаешь, что это была просто великолепная идея! Почему? Да потому что невозможно запомнить какие и где файлы хранятся, и когда нужно удалить директорию с каким-нибудь глупым или подозрительным названием (явно созданную по ошибке) можно воспользоваться безопасной командой rmdir, которая выдаст ошибку если в этой директории есть какие-то файлы. Очень удобно! Это защищает от случайного удаления.

Скажем, есть переменная с именем %pathtofolder% , которая проясняет, что это полный путь к папке.

Я хочу удалить все файлы и подпапки в этом каталоге, но не сам каталог.

Но может быть ошибка типа «этот файл / папка уже используется» . когда это происходит, нужно просто продолжить и пропустить этот файл / папку.

Есть ли какая-то команда для этого?

Это безумие, как трудно Windows удалить папки . Или создать папку, начинающуюся с точки . Слава богу за интеграцию Bash в Windows! rm -rf path\to\folder работает в Windows 10 (или может прийти из Git Bash . в любом случае, если у вас есть, что стоит попробовать!)

Вы можете использовать этот скрипт для очистки папки и файлов в C:\Temp исходном коде :

Создайте пакетный файл (скажем, delete.bat), содержащий указанную выше команду. Перейдите в папку, в которой находится файл delete.bat, а затем выполните команду: delete.bat

Я пробовал, но, к сожалению, файлы, которые не были удалены, удаляются только подпапки. Например, у меня есть папка с именем Test. Он содержит 2 папки с именами «Ripon» и «Wasim» и содержит файл с именем «riponalwasim.txt». Подпапки Ripon и Wasim были удалены, но riponalwasim.txt не был удален. Используйте одиночный знак процента, если вы хотите работать напрямую из командной строки, например %p Грустно, что это занимает 2 строки, но, по крайней мере, это работает! Я устал искать работающий «однострочник» и пойду с этим, спасибо! Вы можете использовать оператор «&&» для выполнения двух команд в одной строке без файла bat (обратите внимание на один «%» вместо «%%»). del / s / q "myfolder *" && FOR / D% p IN ("myfolder *") DO rmdir "% p" / s / q <for / F "delims =" %% i in ('dir / b / a-d') do (echo del "%% i" / q)> может помочь для файлов (просто удалите это эхо)

rmdir моя самая любимая команда для работы. Он работает для удаления огромных файлов и папок с подпапками. Резервная копия не создается, поэтому перед выполнением этой команды убедитесь, что вы скопировали свои файлы безопасно.

Это автоматически удаляет папку и все файлы и подпапки.

Похоже, это удаляет путь к каталогу, который ОП хотел сохранить. Это приведет к удалению самой папки, поэтому вам нужно добавить еще одну команду: md FOLDERNAME (см. Ответ от @rakoczyn ниже). Что вы подразумеваете под «резервное копирование создано» здесь? Я не вижу ничего, что могло бы создать какую-либо резервную копию . Чтобы не удалять саму папку, сделайте ее текущей папкой, а затем используйте «.» как FOLDERNAME. Повторное создание этого впоследствии не обязательно то же самое, потому что ACL могли быть потеряны. cd "FOLDERNAME" RD . /S /Q

Самое простое решение, которое я могу придумать, - это удалить весь каталог с помощью

Затем создайте этот каталог снова:

Что делать, если у вас есть разрешение на удаление, но не создание новых папок? Я надеюсь, что это возможно :) Это плохое решение, так как оно приводит к гонке в файловой системе за узел каталога, то есть вторая команда может потерпеть неудачу, если выполняется сразу после нее. Кроме того , плохое решение , если каталог имеет специальные разрешения , которые вы просто Nuked гм (упс) Не откладывайте на ответ: «Каталог не пустой». Просто дважды введите команду :-) RD и RMDIR - это одна и та же команда, и, поскольку вы опубликовали этот ответ через 9 месяцев после того, как кто-то дал тот же ответ, почему люди дают вам очки?

Это удалит папки и файлы и оставит папку позади.

Для тех, кто не уверен в этом подходе: он определенно не создает каталог заново. Без 2>nul него выводится «Процесс не может получить доступ к файлу, потому что он используется другим процессом». Я ненавижу, что Windows не может удалить файлы и папки, используемые какой-либо программой. И мне нравится, что вы использовали это в свою пользу в этой строчке. Так что это убер-магия, как мы очищаем папку в Windows ?? Впечатляет :) @mlvljr Только если вы хотите сохранить родительскую папку тоже. RD /? покажет вам простой способ очистить папку. Это хорошо, если вам нужно вернуться на исходную позицию, иначе просто CD mypath && RD /S . будет достаточно. Мне не нравится, что вам приходится повторять свой путь дважды, хотя для длинных путей его становится трудно читать. Так что я бы просто добавил set p="mypath" в начале.

. удаляет все файлы и папки в данном каталоге, но не сам каталог.

это должен быть правильный ответ .. просто сделайте простой .. deletemyfoldercontents.bat файл .. вставьте ваш путь, и он работает как шарм .. В командной строке DEL также отсутствует опция /A для удаления файлов со скрытым набором атрибутов, и %dir%\* их следует заключать в двойные кавычки, как, например, "%dir%\*" для каталогов, содержащих пробел или один из этих символов &()[]<>^=;!'+,`

. И командную строку FOR следует изменить на, for /F "eol=| delims=" %%I in ('dir "%dir%\*" /AD /B 2^>nul') do rd /Q /S "%dir%\%%I" поскольку FOR игнорирует каталоги со скрытым набором атрибутов. DIR с параметрами /AD /B выводит все каталоги только с их именами. Кстати, dir это не хорошее название для переменной среды.

@RMiranda, в моих тестах, он делает именно так, как просил ОП. У вас есть случай, когда он не удаляет подпапки? Отвечает ли этот ответ требованию «может быть ошибка типа« этот файл / папка уже используется ». когда это происходит, он должен просто продолжить и пропустить этот файл / папку». ?

Обновление :

Из этого полезного комментария (спасибо Moritz Both ) вы можете добавить && между ними, поэтому RMDIR не запустите, если CD команда не будет выполнена (например, имя каталога с ошибкой):

/ S: удаляет дерево каталогов (указанный каталог и все его подкаталоги, включая все файлы).

/ Q: Указывает тихий режим. Не запрашивает подтверждения при удалении дерева каталогов. (Обратите внимание, что / q работает, только если указан / s.)

Это идеально подходит для очистки temp, но это cd [Your_Folder] очень важно - я должен помнить об этом, чтобы не удалять сам каталог . Это правильное решение. Добавьте && между командами вместо разрыва строки, и вы в безопасности от сбой CD. Это простое и правильное решение. Даже работает с командной оболочкой Azure! довольно плохое решение . Мне, например, нужно это удаление командной строки для обновления SVN - я хочу удалить все файлы и папки, прежде чем я сделаю обновление SVN, потому что могут быть некоторые изменения на машине, где я использую это, но актуально только проверенные в пунктах. Делать RMDIR / S / Q. также удаляет ссылку SVN и, следовательно, больше не делает папку svn

RD расшифровывается как REMOVE Directory.

/ S: Удалить все файлы и подпапки в дополнение к самой папке. Используйте это, чтобы удалить все дерево папок.

/ Q: Тихо - не отображать подтверждение YN

проголосовал за то, что был единственным, кто объяснил, что /S и что /Q значит Номер rd эквивалентен rmdir и удалит сам каталог, а не тот, который хочет OP. Отвечает ли этот ответ требованию «может быть ошибка типа« этот файл / папка уже используется ». когда это происходит, он должен просто продолжить и пропустить этот файл / папку.»? Например, прерывается ли он полностью вместо продолжения?

Я использую Powershell

Он удалит содержимое папки, а не саму папку.

Ответ rhellem недавно, но это единственный ответ, который действительно сделает это для меня. (Win 8.1, не по выбору) Из командной строки пакета: powershell -Command "Remove-Item 'PathToMyDirectory\*' -Recurse -Force" Обратите внимание, что "*" необходимо, или оно удалит папку.

Простое решение для единой командной строки, которое, конечно же, также можно использовать в командном файле:

Эта командная строка содержит три команды, выполняемые одна за другой.

Первая команда PUSHD помещает текущий путь к каталогу в стек, а затем создает %PathToFolder% текущий каталог для запуска процесса команды.

Это также работает для путей UNC по умолчанию, поскольку расширения команд включены по умолчанию, и в этом случае PUSHD создает временную букву диска, которая указывает на указанный сетевой ресурс, а затем изменяет текущий диск и каталог, используя вновь определенную букву диска.

Система не может найти указанный путь.

Следующая команда RD выполняется только в том случае, если изменение текущего каталога для текущего командного процесса на указанный каталог прошло успешно, то есть указанный каталог вообще существует.

Команда RD с параметрами /Q и тихо /S удаляет каталог со всеми подкаталогами, даже если указанный каталог содержит файлы или папки со скрытым атрибутом или с установленным атрибутом только для чтения. Системный атрибут никогда не препятствует удалению файла или папки.

Папки, используемые в качестве текущего каталога для любого запущенного процесса. Все дерево папок в такой папке не может быть удалено, если папка используется в качестве текущего каталога для любого запущенного процесса.

Файлы, открытые в настоящее время любым запущенным процессом с правами доступа к файлу, установленными для открытия файла, чтобы предотвратить удаление файла во время открытия работающим приложением / процессом. Такой открытый файл также предотвращает удаление всего дерева папок в открытый файл.

Файлы / папки, для которых у текущего пользователя нет необходимых (NTFS) разрешений на удаление файла / папки, что также предотвращает удаление дерева папок в этот файл / папку.

Процесс не может получить доступ к файлу, потому что он используется другим процессом.

Третья команда, POPD , выполняется независимо от значения выхода команды RD .

POPD извлекает путь каталога, выдвинутый PUSHD из стека, и изменяет текущий каталог для запуска процесса команды на этот каталог, то есть восстанавливает исходный текущий каталог. POPD удаляет временную букву диска, созданную PUSHD в случае пути к папке UNC.

Примечание: POPD может молча прекратить восстановление первоначального текущего каталога в случае, если исходный текущий каталог был подкаталогом каталога для очистки, который больше не существует. В этом особом случае %PathToFolder% остается текущий каталог. Поэтому желательно запускать командную строку выше, а не из подкаталога %PathToFolder% .

Еще один интересный факт: я пробовал в командной строке также использовать UNC-путь, используя общий каталог C:\Temp с именем общего ресурса Temp и используя UNC-путь, \\%COMPUTERNAME%\Temp\CleanTest назначенный переменной среды PathToFolder в Windows 7. Если текущий каталог при запуске командной строки является подкаталогом общего локального каталога папка доступ с помощью UNC - пути, то есть C:\Temp\CleanTest\Subfolder1 , Subfolder1 удаляются с помощью РДА , а следующий POPD терпит неудачу молча делаю C:\Temp\CleanTest\Subfolder1 снова текущий каталог в результате Z:\CleanTest оставшегося в качестве текущего каталога для процесса команды работает. Таким образом, в этом очень особом случае временная буква диска остается до тех пор, пока текущий каталог не будет изменен, например, с помощью cd /D %SystemRoot% в локальный каталог действительно существует. К сожалению, POPD не завершается со значением больше 0, если не удается восстановить исходный текущий каталог, что делает невозможным обнаружение этого особого состояния ошибки, используя только код выхода POPD . Однако можно предположить, что никто никогда не сталкивался с этим особенным случаем ошибки, поскольку пути UNC обычно не используются для доступа к локальным файлам и папкам.

Чтобы лучше понять используемые команды, откройте окно командной строки, выполните там следующие команды и внимательно прочитайте справку, отображаемую для каждой команды.

Теперь давайте посмотрим на решение для пакетных файлов, используя команду DEL для удаления файлов в %PathToFolder% и FOR и RD для удаления вложенных папок в %PathToFolder% .

Пакетный файл сначала гарантирует, что переменная среды PathToFolder действительно определена с путем к папке без двойных кавычек и без обратной косой черты в конце. Обратная косая черта в конце не будет проблемой, но двойные кавычки в пути к папке могут быть проблематичными, поскольку PathToFolder во время выполнения пакетного файла значение объединяется с другими строками.

Важны две строки:

Команда DEL используется для удаления всех файлов в указанном каталоге.

Команды FOR и RD используются для удаления всех подкаталогов в указанном каталоге. Но for /D не используется, поскольку FOR игнорирует в этом случае подкаталоги с установленным атрибутом hidden. По этой причине for /F используется для запуска следующей командной строки в отдельном командном процессе, запущенном в фоновом режиме с помощью %ComSpec% /c :

Оператор перенаправления > должен быть экранирован с помощью символа вставки, ^ в командной строке FOR интерпретироваться как литеральный символ, когда интерпретатор команд Windows обрабатывает эту командную строку перед выполнением команды FOR, которая выполняет встроенную dir командную строку в отдельном запущенном командном процессе. на заднем фоне.

FOR обрабатывает захваченный вывод, записанный для обработки STDOUT запущенного командного процесса, которые являются именами подкаталогов без пути и никогда не заключаются в двойные кавычки.

Параметр FOR with /F игнорирует пустые строки, которые здесь не встречаются, поскольку DIR с параметром /B не выводит пустые строки.

FOR также игнорирует строки, начинающиеся с точки с запятой, которая является символом конца строки по умолчанию. Имя каталога может начинаться с точки с запятой. По этой причине eol=| используется для определения символа вертикальной черты как символа конца строки, который ни один каталог или файл не может иметь в своем имени.

FOR разделит строку на подстроки, используя пробел и горизонтальную табуляцию в качестве разделителей, и назначит только первую строку с пробелом / табуляцией для указанной переменной цикла I . Такое поведение разделения здесь нежелательно, поскольку имя каталога может содержать один или несколько пробелов. Поэтому delims= используется для определения пустого списка разделителей, чтобы отключить поведение разделения строк и получить присвоение переменной цикла I , всегда полное имя каталога.

Команда FOR запускает команду RD для каждого имени каталога без пути, поэтому в командной строке RD необходимо еще раз указать путь к папке, который объединяется с именем подпапки.

Чтобы понять используемые команды и то, как они работают, откройте окно командной строки, выполните там следующие команды и внимательно прочитайте все страницы справки, отображаемые для каждой команды.

Скажем, есть переменная с именем %pathtofolder% , поскольку она дает понять, что это полный путь к папке.

Я хочу удалить каждый файл и подпапку в этом каталоге, но не сам каталог.

Но может возникнуть ошибка типа «этот файл / папка уже используется» . когда это произойдет, нужно просто продолжить и пропустить этот файл / папку.

Есть ли для этого какая-то команда?

Вы можете использовать этот сценарий оболочки для очистки папки и файлов в C:\Temp источнике:

Создайте командный файл (скажем, delete.bat), содержащий указанную выше команду. Перейдите в место, где находится файл delete.bat, а затем выполните команду: delete.bat

rmdir - моя любимая команда на все времена. Он работает для удаления огромных файлов и папок с подпапками. Резервная копия не создается, поэтому перед запуском этой команды убедитесь, что вы безопасно скопировали файлы.

При этом автоматически удаляется папка, а также все файлы и подпапки.

Самое простое решение, которое я могу придумать, - это удалить весь каталог с помощью

Затем снова создайте этот каталог:

Это удалит папки и файлы и оставит папку.

. удаляет все файлы и папки в данном каталоге, но не сам каталог.

Обновление :

Из этот полезный комментарий (благодаря Moritz Both) вы можете добавить && между , поэтому RMDIR не запустится, если команда CD завершится неудачно (например, неверно введено имя каталога):

/ S: удаляет дерево каталогов (указанный каталог и все его подкаталоги, включая все файлы).

/ Q: указывает тихий режим. Не запрашивает подтверждение, когда удаление дерева каталогов. (Обратите внимание, что / q работает, только если / s указано.)

Я использую Powershell

Он удалит содержимое папки, а не саму папку.

RD означает УДАЛИТЬ каталог.

/ S: удалить все файлы и подпапки помимо самой папки. Используйте это, чтобы удалить все дерево папок.

/ Q: Quiet - не отображать подтверждение YN

Используйте Блокнот, чтобы создать текстовый документ и скопировать / вставить следующее:

Выберите Сохранить как и имя файла:

Сохранить как тип: все файлы и нажмите кнопку Сохранить .

Он работает с любой учетной записью (администратор или обычный пользователь). Просто запустите!

В этом примере я использую временную переменную, но вы можете использовать любую другую! PS: Только для ОС Windows!

Простое решение с одной командной строкой, которое, конечно, также можно использовать в пакетном файле:

Эта командная строка содержит три команды, выполняемые одна за другой.

Первая команда PUSHD помещает текущий путь к каталогу в стек, а затем делает %PathToFolder% текущим каталогом для выполнения командного процесса.

Это также работает для путей UNC по умолчанию, поскольку расширения команд включены по умолчанию, и в этом случае PUSHD создает временную букву диска, которая указывает на указанный сетевой ресурс, а затем изменяет текущий диск и каталог, используя вновь заданную букву диска.

Система не может найти указанный путь.

Следующая команда RD выполняется только в том случае, если изменение текущего каталога для текущего командного процесса на указанный каталог было успешным, т.е. указанный каталог вообще существует.

Команда RD с параметрами /Q и /S удаляет каталог незаметно со всеми подкаталогами , даже если указанный каталог содержит файлы или папки со скрытым атрибутом или с установленным атрибутом только для чтения. Системный атрибут никогда не предотвращает удаление файла или папки.

Папки, используемые в качестве текущего каталога для любого запущенного процесса. Все дерево папок в такой папке не может быть удалено, если папка используется в качестве текущего каталога для любого запущенного процесса.

Файлы, открытые в данный момент любым запущенным процессом с разрешениями доступа к файлу, установленными для открытого файла, чтобы предотвратить удаление файла при открытии запущенным приложением / процессом. Такой открытый файл также предотвращает удаление всего дерева папок в открытом файле.

Файлы / папки, в которых текущий пользователь не имеет необходимых разрешений (NTFS) для удаления файла / папки, что также предотвращает удаление дерева папок в этот файл / папку.

Процесс не может получить доступ к файлу, потому что он используется другим процессом.

Третья команда, POPD , выполняется независимо от значения выхода команды RD .

POPD извлекает путь к каталогу, выдвинутому PUSHD из стека, и изменяет текущий каталог для запуска командного процесса на этот каталог, т. е. восстанавливает исходный текущий каталог. POPD удаляет временную букву диска, созданную PUSHD в случае пути к папке UNC.

Примечание. POPD может автоматически не восстановить исходный текущий каталог, если исходный текущий каталог был подкаталогом очищаемого каталога, который больше не существует. В этом особом случае текущим каталогом остается %PathToFolder% . Поэтому рекомендуется запускать указанную выше командную строку не из подкаталога %PathToFolder% .

Еще один интересный факт: Я пробовал использовать командную строку, также используя UNC-путь, разделяя локальный каталог C:\Temp с общим именем Temp и используя UNC-путь \\%COMPUTERNAME%\Temp\CleanTest , назначенный переменной среды PathToFolder в Windows 7. Если текущий каталог при запуске командной строки является подкаталогом общей локальной папки, доступ к которой осуществляется с использованием пути UNC, то есть C:\Temp\CleanTest\Subfolder1 , Subfolder1 удаляется с помощью RD , а следующий POPD молча терпит неудачу при повторном создании C:\Temp\CleanTest\Subfolder1 текущего каталога, в результате чего Z:\CleanTest остается текущим каталогом для запущенного командного процесса. Таким образом, в этом очень, очень особом случае временная буква диска остается до тех пор, пока текущий каталог не будет изменен, например, с cd /D %SystemRoot% на реально существующий локальный каталог. К сожалению, POPD не завершает работу со значением больше 0, если ему не удается восстановить исходный текущий каталог, что делает невозможным обнаружение этого очень особого состояния ошибки, используя только код выхода POPD . . Однако можно предположить, что никто никогда не сталкивался с этой особой ошибкой, поскольку пути UNC обычно не используются для доступа к локальным файлам и папкам.

Чтобы лучше понять используемые команды, откройте окно командной строки, выполните следующие команды и внимательно прочтите справку, отображаемую для каждой команды.

Затем давайте посмотрим на решение пакетного файла, используя команду DEL для удаления файлов в %PathToFolder% и FOR и RD для удаления вложенные папки в %PathToFolder% .

Пакетный файл сначала проверяет, действительно ли переменная среды PathToFolder определена с путем к папке без двойных кавычек и без обратной косой черты в конце. Обратная косая черта в конце не будет проблемой, но двойные кавычки в пути к папке могут быть проблематичными, поскольку значение PathToFolder объединяется с другими строками во время выполнения пакетного файла.

Важны две строчки:

Команда DEL используется для удаления всех файлов в указанном каталоге.

Команды FOR и RD используются для удаления всех подкаталогов в указанном каталоге. Но for /D не используется, потому что FOR в этом случае игнорирует подкаталоги с установленным скрытым атрибутом. По этой причине for /F используется для запуска следующей командной строки в отдельном командном процессе, запущенном в фоновом режиме с помощью %ComSpec% /c :

Оператор перенаправления > должен быть экранирован с помощью символа вставки ^ в командной строке FOR , чтобы он интерпретировался как буквальный символ, когда интерпретатор команд Windows обрабатывает эту командную строку. перед выполнением команды FOR , которая выполняет встроенную командную строку dir в отдельном командном процессе, запущенном в фоновом режиме.

FOR обрабатывает захваченные выходные данные, записанные для обработки STDOUT запущенного командного процесса, которые представляют собой имена подкаталогов без пути и никогда не заключаются в двойные кавычки.

FOR с параметром /F игнорирует пустые строки, которых здесь нет, поскольку DIR с параметром /B не выводит пустые строки.

FOR также игнорирует строки, начинающиеся с точки с запятой, которая является символом конца строки по умолчанию. Имя каталога может начинаться с точки с запятой. По этой причине eol=| используется для определения символа вертикальной черты как символа конца строки, который ни один каталог или файл не может иметь в своем имени.

FOR разделит строку на подстроки, используя пробел и горизонтальную табуляцию в качестве разделителей, и назначит только первую строку, разделенную пробелом / табуляцией, указанной переменной цикла I . Такое поведение разделения здесь не требуется, поскольку имя каталога может содержать один или несколько пробелов. Поэтому delims= используется для определения пустого списка разделителей, чтобы отключить поведение разделения строк и присвоить переменной цикла, I , всегда полное имя каталога.

Команда FOR запускает команду RD для каждого имени каталога без пути, поэтому в командной строке RD должен быть указан путь к папке. еще раз, который связан с именем подпапки.

Чтобы понять используемые команды и то, как они работают, откройте окно командной строки, выполните там следующие команды и внимательно прочитайте все страницы справки, отображаемые для каждой команды.

  • del /?
  • dir /?
  • echo /?
  • endlocal /?
  • for /?
  • goto /?
  • if /?
  • rd /?
  • rem /?
  • set /?
  • setlocal /?

Чтобы удалить файл:

Чтобы удалить папку со всеми файлами в ней:

Удалить все файлы из определенной папки (не удаляя саму папку) немного сложно. del /s *.* не может удалять папки, но удаляет файлы из всех подпапок. Итак, необходимы две команды:

Вы можете сделать это, используя следующую команду, чтобы удалить все содержимое и саму родительскую папку:

Читайте также: