Разве del / s (a) не работает вообще (он доступен только в некоторых версиях) или (b) покидает каталог верхнего уровня, но удаляет все под ним, или (c) оставляет все каталоги при удалении всех файлов?
wnoise
@ Аарон, ответ c, вам нужно использовать rmdir / s для удаления каталогов и файлов.
Клин
31
Не правда ли, format c:тогда установка Linux? Я, конечно, шучу.
Василий Старынкевич
Ответы:
694
RMDIR или RD, если вы используете классическую командную строку (cmd.exe):
rd /s /q "path"
RMDIR [/ S] [/ Q] [диск:] путь
RD [/ S] [/ Q] [диск:] путь
/ S Удаляет все каталоги и файлы в указанном каталоге в дополнение к самому каталогу. Используется для удаления дерева каталогов.
/ Q Тихий режим, не спрашивайте, нормально ли удалить дерево каталогов с помощью / S
Если вы используете PowerShell можно использовать Remove-Item(который является псевдонимом del, erase, rd, ri, rmи rmdir) и принимает -Recurseаргумент , который может быть замкнута в-r
Стоит отметить, что для большого количества файлов rmdir / s / q обычно значительно быстрее, чем эквивалентная операция «select dir, shift + delete» в проводнике.
Клин
9
Это не удаляет файлы, как это делает rm -rf, а также возвращает ненулевое значение, когда каталог не существует, поэтому rd /s /q foo && echo "yay"произойдет сбой, если каталог "foo" не существует.
Дирк Греневельд
17
Что делать, реж. не пустые и одни файлы попадают, Access is deniedа другие The process cannot access the file because it is being used by another process?
Евгений
6
Я только что попробовал это в семь, и вам нужно сделать / S и / Q (заглавные буквы)
Форд префект
2
Мистифицированный здесь. Я знаю, что пробовал эту команду, и она не работала, если в дереве каталогов были файлы; Теперь я возвращаюсь и. , , волшебно, кажется, работает. Кто-нибудь еще испытывает противоречивое поведение с этим ?!
Мой герой! И один совет: вы создаете пустую папку в C: \ empty, а затем один раз внутри каждой сумасшедшей папки, это можно просто сделатьrobocopy /mir c:\empty .
Леон Пеллетье
Это takeownпомогло мне, когда я по ошибке скопировал папку из системы Linux с помощью rsync, и у меня не было прав на удаление этой папки ... Даже робокопия не сработала. Спасибо
Ярда
1
Очень хороший ответ. Оно работает. (все остальные ответы на странице нет). Но cacls не рекомендуется. Можно ли дать современный ответ, пожалуйста? Второй вариант уже работает и не устарел.
Гангнус
Это ничего не делает для меня. Может кто-нибудь объяснить, как это должно работать? (robocopy) - Он может удалять содержимое папок, но не сами папки
Ralf
114
RMDIR [/S] [/Q] [drive:]path
RD [/S] [/Q] [drive:]path
/S Удаляет все каталоги и файлы в указанном каталоге в дополнение к самому каталогу. Используется для удаления дерева каталогов.
/Q Тихий режим, не спрашивайте, нормально ли удалить дерево каталогов с /S
Принятый ответ хорош, но, если у вас установлен Node, вы можете сделать это гораздо точнее с помощью библиотеки узлов «rimraf», которая позволяет создавать шаблоны. Если вы часто используете это (я делаю), просто установите его глобально.
yarn global add rimraf
тогда, например, шаблон, который я использую постоянно:
rimraf .\**\node_modules
или для однострочника, который позволит вам избежать глобальной установки, но это займет немного больше времени для динамической загрузки пакета:
работал для меня в комбинации w / rmdir / s / q, так как некоторые файлы были заблокированы, и rmdir не сработал на них. del / foldername уничтожил заблокированные файлы, что позволило rmdir избавиться от корневого каталога. Ницца.
Есть три сценария, где rm -rfобычно используется, где ожидается возврат 0:
Указанный путь не существует.
Указанный путь существует и является каталогом.
Указанный путь существует и является файлом.
Я собираюсь игнорировать всю проблему с разрешениями, но никто не использует разрешения и не пытается запретить себе доступ на запись в Windows в любом случае (хорошо, это должно быть шутка…).
Сначала установите ERRORLEVELзначение 0, а затем удалите путь только в том случае, если он существует, используя различные команды в зависимости от того, является ли он каталогом. IF EXISTне устанавливается ERRORLEVELв 0, если путь не существует, поэтому ERRORLEVELсначала необходимо установить значение 0 для правильного определения успеха способом, который имитирует нормальное rm -rfиспользование. Защита с RDпомощью IF EXISTнеобходима, потому что RD, в отличие от этого rm -f, выдаст ошибку, если цель не существует.
Следующий фрагмент сценария предполагает, что 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 и просто используете его.
Вы можете установить GnuWin32 и использовать команды * nix для Windows. Я устанавливаю это прежде, чем я установлю что-либо еще на мятную свежую копию окон. :)
ИСПОЛЬЗУЙТЕ НА СВОЙ РИСК. ИНФОРМАЦИЯ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ». НЕ ПРОВЕРЕНО
Щелкните правой кнопкой мыши значок Windows (обычно слева внизу)> щелкните «Windows PowerShell (Admin)»> и используйте эту команду (с должной осторожностью вы можете легко удалить все свои файлы, если не будете осторожны):
rd -r -include *.* -force somedir
Где somedirнаходится непустой каталог, который вы хотите удалить.
Обратите внимание, что с внешними подключенными дисками или дисками с проблемами Windows иногда ведет себя странно - она не выдает ошибку при удалении (или любой попытке копирования), но каталог не удаляется (или не копируется) в соответствии с инструкциями. (Я обнаружил, что в этом случае, по крайней мере для меня, команда, указанная @n_y в его ответе, приведет к ошибкам типа «get-childitem: файл или каталог повреждены и не читаются.» В результате в PowerShell)
ПОЗДНО, НО ВАЖНЫЙ ОТВЕТ всем, у кого возникают проблемы с установкой пакетов npm на Windows-машине, и если вы видите сообщение об ошибке " rm -rf..." команда не найдена. Вы можете использовать bash cli для запуска команды rm в Windows.
для пользователей npm вы можете изменить конфигурацию npm на npm config set script-shell "C:\Program Files\Git\bin\bash.exe" следующим образом: если у пакета npm, который вы пытаетесь установить, есть сценарий постустановки , использующий rm -rfкоманду, вы сможете запустить эту rmкоманду, не внося изменений в пакет npm или не отключая его. конфиг постустановочных скриптов. (Например, styled-componentsиспользует rmкоманду в своих скриптах после установки)
Если вы хотите просто использовать rmкоманду, вы можете легко использовать bash и передать аргументы.
Так что да, вы можете использовать команду 'rm' в Windows.
Просто попробуйте уменьшить длину пути. ie :: Переименуйте все папки, которые приводят к такому файлу, к наименьшим возможным именам. Скажи одну букву именам. Продолжайте переименовывать вверх в иерархии папок. Благодаря этому вы эффективно уменьшите длину пути. Теперь, наконец, попробуйте удалить файл прямо сейчас.
format c:
тогда установка Linux? Я, конечно, шучу.Ответы:
RMDIR или RD, если вы используете классическую командную строку (cmd.exe):
Если вы используете PowerShell можно использовать
Remove-Item
(который является псевдонимомdel
,erase
,rd
,ri
,rm
иrmdir
) и принимает-Recurse
аргумент , который может быть замкнута в-r
источник
rd /s /q foo && echo "yay"
произойдет сбой, если каталог "foo" не существует.Access is denied
а другиеThe process cannot access the file because it is being used by another process
?админ:
Работает для всего, включая файлы sys
РЕДАКТИРОВАТЬ: Я на самом деле нашел лучший способ, который также решает слишком длинный путь к файлу:
источник
robocopy /mir c:\empty .
takeown
помогло мне, когда я по ошибке скопировал папку из системы Linux с помощью rsync, и у меня не было прав на удаление этой папки ... Даже робокопия не сработала. СпасибоRMDIR [/S] [/Q] [drive:]path
RD [/S] [/Q] [drive:]path
/S
Удаляет все каталоги и файлы в указанном каталоге в дополнение к самому каталогу. Используется для удаления дерева каталогов./Q
Тихий режим, не спрашивайте, нормально ли удалить дерево каталогов с/S
источник
Вы можете установить Cygwin, который имеет
rm
как иls
т. Д.источник
Перейти к пути и вызвать эту команду.
/ s: удаляет указанный каталог и все подкаталоги, включая любые файлы. Используйте / s, чтобы удалить дерево.
/ q: запускает rmdir в тихом режиме. Удаляет каталоги без подтверждения.
/? : Отображение справки в командной строке.
источник
Для удаления каталога (независимо от того, существует он или нет) используйте следующее:
источник
rmdir /S /Q %DIRNAME%
источник
Принятый ответ хорош, но, если у вас установлен Node, вы можете сделать это гораздо точнее с помощью библиотеки узлов «rimraf», которая позволяет создавать шаблоны. Если вы часто используете это (я делаю), просто установите его глобально.
тогда, например, шаблон, который я использую постоянно:
или для однострочника, который позволит вам избежать глобальной установки, но это займет немного больше времени для динамической загрузки пакета:
источник
Попробуйте эту команду:
источник
rmdir / s dirname
источник
Сначала давайте рассмотрим, что
rm -rf
делает:Есть три сценария, где
rm -rf
обычно используется, где ожидается возврат0
:Я собираюсь игнорировать всю проблему с разрешениями, но никто не использует разрешения и не пытается запретить себе доступ на запись в Windows в любом случае (хорошо, это должно быть шутка…).
Сначала установите
ERRORLEVEL
значение 0, а затем удалите путь только в том случае, если он существует, используя различные команды в зависимости от того, является ли он каталогом.IF EXIST
не устанавливаетсяERRORLEVEL
в 0, если путь не существует, поэтомуERRORLEVEL
сначала необходимо установить значение 0 для правильного определения успеха способом, который имитирует нормальноеrm -rf
использование. Защита сRD
помощьюIF EXIST
необходима, потому чтоRD
, в отличие от этогоrm -f
, выдаст ошибку, если цель не существует.Следующий фрагмент сценария предполагает, что DELPATH заключен в кавычки. (Это безопасно , когда вы делаете что - то вроде
SET DELPATH=%1
. Попробуйте положитьECHO %1
в.cmd
и передавая ему аргумент с пробелами в ней и посмотреть , что происходит за себя). После завершения фрагмента вы можете проверить наличие ошибок с помощьюIF ERRORLEVEL 1
.Дело в том, что все проще, когда среда просто соответствует POSIX. Или если вы устанавливаете минимальный MSYS и просто используете его.
источник
через Powershell
через командную строку
https://stackoverflow.com/a/35731786/439130
источник
Вот что вам нужно сделать ...
Создайте командный файл со следующей строкой
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
источник
Использование Powershell 5.1
Замените журналы на имя каталога, который вы хотите удалить.
get-childitem выполняет поиск дочернего каталога с именем рекурсивно по текущему пути (.).
remove-item удаляет результат.
источник
Вы можете установить GnuWin32 и использовать команды * nix для Windows. Я устанавливаю это прежде, чем я установлю что-либо еще на мятную свежую копию окон. :)
источник
ИСПОЛЬЗУЙТЕ НА СВОЙ РИСК. ИНФОРМАЦИЯ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ». НЕ ПРОВЕРЕНО
Щелкните правой кнопкой мыши значок Windows (обычно слева внизу)> щелкните «Windows PowerShell (Admin)»> и используйте эту команду (с должной осторожностью вы можете легко удалить все свои файлы, если не будете осторожны):
Где
somedir
находится непустой каталог, который вы хотите удалить.Обратите внимание, что с внешними подключенными дисками или дисками с проблемами Windows иногда ведет себя странно - она не выдает ошибку при удалении (или любой попытке копирования), но каталог не удаляется (или не копируется) в соответствии с инструкциями. (Я обнаружил, что в этом случае, по крайней мере для меня, команда, указанная @n_y в его ответе, приведет к ошибкам типа «get-childitem: файл или каталог повреждены и не читаются.» В результате в PowerShell)
источник
ПОЗДНО, НО ВАЖНЫЙ ОТВЕТ всем, у кого возникают проблемы с установкой пакетов npm на Windows-машине, и если вы видите сообщение об ошибке "
rm -rf...
" команда не найдена. Вы можете использовать bash cli для запуска команды rm в Windows.для пользователей npm вы можете изменить конфигурацию npm на
npm config set script-shell "C:\Program Files\Git\bin\bash.exe"
следующим образом: если у пакета npm, который вы пытаетесь установить, есть сценарий постустановки , использующийrm -rf
команду, вы сможете запустить этуrm
команду, не внося изменений в пакет npm или не отключая его. конфиг постустановочных скриптов. (Например,styled-components
используетrm
команду в своих скриптах после установки)Если вы хотите просто использовать
rm
команду, вы можете легко использовать bash и передать аргументы.Так что да, вы можете использовать команду 'rm' в Windows.
источник
вот что сработало для меня:
Просто попробуйте уменьшить длину пути. ie :: Переименуйте все папки, которые приводят к такому файлу, к наименьшим возможным именам. Скажи одну букву именам. Продолжайте переименовывать вверх в иерархии папок. Благодаря этому вы эффективно уменьшите длину пути. Теперь, наконец, попробуйте удалить файл прямо сейчас.
источник
Существует также deltree, если вы используете более старую версию Windows.
Мне очень нравится этот сайт для поиска команд: SS64: Del - Удалить файлы
источник
каталог del / s / q был удален
источник