«Rm -rf» эквивалент для Windows?

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

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

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

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

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

 rd /s /q "path" 

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

 rd -r "path" 

админ:

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

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

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

 mkdir \empty robocopy /mir \empty folder 

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

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

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

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

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

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

 rd /s /q "FOLDER_NAME" 

/ s: Удаляет указанный каталог и все подкаталоги, включая любые файлы. Используйте / 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 (это значит, что это шутка …).

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

Следующий fragment сценария предполагает, что DELPATH предзачитывается. (Это безопасно, когда вы делаете что-то вроде SET DELPATH=%1 Попробуйте положить ECHO %1 в .cmd и передать ему аргумент с пробелами в нем и посмотреть, что будет для вас). После завершения fragmentа, вы можете проверить наличие ошибки с 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 и просто используйте это.

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

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

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

Просто попробуйте уменьшить длину пути. ie: Переименовать все папки, которые ведут к такому файлу, к наименьшим возможным именам. Скажите одно письмо. Продолжайте переименование вверх в иерархии папок. Благодаря этому 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 ищет каталог для детей с рекурсивным именем из текущего пути (.).

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

del / s / q directorytobedeleted

Interesting Posts
Давайте будем гением компьютера.