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

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

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

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

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

Ответы

Ответ 1

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

rd /s /q "path"

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

rd -r "path"

Ответ 2

админ:

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

Работает для чего угодно, включая sys файлы

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

mkdir \empty
robocopy /mir \empty folder

Ответ 3

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

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

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

  • /Q Тихий режим, не спрашивайте, нормально ли удалять дерево каталогов с помощью /S

Ответ 4

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

Ответ 5

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

rd /s /q "FOLDER_NAME"

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

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

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

Ответ 6

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

if exist myfolder ( rmdir /s/q myfolder )

Ответ 7

rmdir /S /Q %DIRNAME%

Ответ 8

rmdir/s dirname

Ответ 9

Попробуйте выполнить следующую команду:

del /s foldername

Ответ 10

Сначала рассмотрим, что делает 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:

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

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

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

Следующий фрагмент script предполагает, что DELPATH предзачитывается. (Это безопасно, когда вы делаете что-то вроде 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 и просто используйте это.

Ответ 11

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

Ответ 12

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

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

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

Ответ 13

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

yarn global add rimraf

тогда, например, шаблон, который я использую постоянно:

rimraf .\**\node_modules

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

npx rimraf .\**\node_modules

Ответ 14

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

Попробуйте уменьшить длину пути. i.e:: Переименуйте все папки, которые приводят к такому файлу, к наименьшим возможным именам. Скажите одно письмо. Продолжайте переименование вверх в иерархии папок. Благодаря этому u эффективно уменьшает длину пути. Теперь попробуйте сразу удалить файл.

Ответ 15

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

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

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

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

remove-item удаляет результат.

Ответ 16

через Powershell

 Remove-Item -Recurse -Force "TestDirectory"

через командную строку

fooobar.com/questions/1719/...

Ответ 17

Щелкните правой кнопкой мыши значок Windows (обычно слева внизу)> нажмите "Windows Powershell (Admin)">, используйте эту команду (с должной осторожностью вы можете легко удалить все свои файлы, если не будете осторожны):

rd -r -include *.* -force .\somedir\

Где somedir - это непустой каталог, который вы хотите удалить.

Обратите внимание, что с внешними подключенными дисками или дисками с проблемами Windows иногда ведет себя странно - она не выдает ошибку при удалении (или любой попытке копирования), но каталог не удаляется (или не копируется) в соответствии с инструкциями.

Ответ 19

Существует также deltree, если вы используете более старую версию Windows.

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

Ответ 20

del/s/q directorytobedeleted