эквивалент" rm-rf " для Windows?

мне нужен способ рекурсивного удаления папки и ее дочерних элементов.

есть ли встроенный инструмент для этого, или мне нужно его написать?

DEL /S не удаляет каталоги.

DELTREE был удален из Windows 2000+

18 ответов


RMDIR или RD, если вы используете классическую командную строку (cmd.EXE-файл):

rd /s /q "path"

если вы используете PowerShell, вы можете использовать Remove-Item (который имеет псевдоним del, erase, rd, ri, rm и rmdir) и занимает -Recurse аргумент, который может быть закорочен до -r

rd -r "path"

admin:

takeown /r /f folder
cacls folder /c /G "ADMINNAME":F /T
rmdir /s folder

работает для всего, включая sys files

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

mkdir \empty
robocopy /mir \empty folder

RMDIR [/S] [/Q] [drive:]path

RD [/S] [/Q] [drive:]path

  • /S удаляет все каталоги и файлы в указанном каталоге в дополнение к самому каталогу. используется для удаления дерева каталогов.

  • /Q тихий режим, Не спрашивайте, если ok, чтобы удалить дерево каталогов с /S


вы можете установить cygwin, который имеет rm а также ls etc.


перейдите к пути и запустите эту команду.

rd /s /q "FOLDER_NAME"

/С : удаляет указанный каталог и все подкаталоги, включая любые файлы. Используйте /s для удаления дерева.

/ q: запускает rmdir в тихом режиме. Удаляет каталоги без подтверждения.

/? Отображает справку в командной строке.


rmdir /S /Q %DIRNAME%


для удаления каталога (независимо от того, существует он или нет) используйте следующее:

if exist myfolder ( rmdir /s/q myfolder )

попробуйте эту команду:

del /s foldername

rmdir / s dirname


вы можете установить GnuWin32 и использовать команды *nix изначально в windows. Я устанавливаю это, прежде чем устанавливать что-либо еще на мятную свежую копию windows. :)


вот что вам нужно сделать...

создайте пакетный файл со следующей строкой

RMDIR /S %1

сохраните пакетный файл как Remove.bat и положил его в C:\windows

создайте следующий раздел реестра

HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)

запуск regedit и измените значение по умолчанию HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)\default со следующим значением

"c:\windows\REMOVE.bat" "%1"

вот оно! Теперь вы можете щелкнуть правой кнопкой мыши любой каталог и использовать RMDIR функция


во-первых, давайте рассмотрим, что rm -rf тут:

C:\Users\ohnob\things>touch stuff.txt

C:\Users\ohnob\things>rm -rf stuff.txt

C:\Users\ohnob\things>mkdir stuff.txt

C:\Users\ohnob\things>rm -rf stuff.txt

C:\Users\ohnob\things>ls -l
total 0

C:\Users\ohnob\things>rm -rf stuff.txt

есть три сценария, где rm -rf обычно используется там, где ожидается возврат 0:

  1. указанный путь не существует.
  2. указанный путь существует и является каталогом.
  3. указанный путь существует и является файлом.

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

первый set ERRORLEVEL для 0 а затем удалите путь, только если он существует, используя различные команды в зависимости от того, является ли это каталогом. IF EXIST не установлено ERRORLEVEL до 0, если путь не существует, поэтому установка ERRORLEVEL до 0 сначала необходимо правильно определить успех таким образом, чтобы имитировать нормальный rm -rf использование. Охрана RD С IF EXIST - это необходимо, потому что RD в отличие от rm -f, выдаст ошибку, если цель не существует.

следующий фрагмент сценария предполагает, что DELPATH является prequoted. (Это безопасно, когда вы делаете что-то вроде SET DELPATH=%1. Попробуйте положить ECHO %1 на .cmd и передать ему аргумент с пробелами в нем и посмотреть,что произойдет для себя). После завершения фрагмента вы можете проверить наличие сбоя с помощью IF ERRORLEVEL 1.

: # Determine whether we need to invoke DEL or RD or do nothing.
SET DELPATH_DELMETHOD=RD
PUSHD %DELPATH% 2>NUL
IF ERRORLEVEL 1 (SET DELPATH_DELMETHOD=DEL) ELSE (POPD)
IF NOT EXIST %DELPATH% SET DELPATH_DELMETHOD=NOOP
: # Reset ERRORLEVEL so that the last command which
: # otherwise set it does not cause us to falsely detect
: # failure.
CMD /C EXIT 0
IF %DELPATH_DELMETHOD%==DEL DEL /Q %DELPATH%
IF %DELPATH_DELMETHOD%==RD RD /S /Q %DELPATH%

Точка, все проще, когда окружающая среда просто соответствует в POSIX. Или если вы установите минимальный MSYS и просто используете его.


вот что сработало для меня:

просто попробуйте уменьшить длину пути. Я. E:: переименуйте все папки, которые приводят к такому файлу, в наименьшие возможные имена. Произнесите имена из одной буквы. Продолжайте переименование вверх в иерархии папок. Этим u эффективно уменьшает длину пути. Теперь, наконец, попробуйте удалить файл сразу.


это удалит "мою папку" и ее содержимое без подсказки:

rd /s /q "C:\Users\jerry.g\AppData\Roaming\my folder"

Использование Powershell 5.1

 get-childitem *logs* -path .\ -directory -recurse | remove-item -confirm:$false -recurse -force

заменить журналы С именем каталога, который вы хотите удалить.

get-childitem поиск дочернего каталога с именем рекурсивно из текущего пути (.).

удалить-пункт удаляет результат.


существует также deltree, если вы находитесь на более старой версии windows.

Мне очень нравится этот сайт для поиска команды: SS64: Del-удалить файлы


del /s / q directorytobedeleted