Мне нужен способ рекурсивного удаления папки и ее дочерних элементов.
Для этого есть готовый инструмент или мне нужно написать его?
DEL /S не удаляет каталоги.
DELTREE был удален из Windows 2000+
format c:тогда установка Linux? Я, конечно, шучу.
Мне нужен способ рекурсивного удаления папки и ее дочерних элементов.
Для этого есть готовый инструмент или мне нужно написать его?
DEL /S не удаляет каталоги.
DELTREE был удален из Windows 2000+
format c:тогда установка Linux? Я, конечно, шучу.
Ответы:
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
rd -r "path"
rd /s /q foo && echo "yay"произойдет сбой, если каталог "foo" не существует.
Access is deniedа другие The process cannot access the file because it is being used by another process?
админ:
takeown /r /f folder
cacls folder /c /G "ADMINNAME":F /T
rmdir /s folder
Работает для всего, включая файлы sys
РЕДАКТИРОВАТЬ: Я на самом деле нашел лучший способ, который также решает слишком длинный путь к файлу:
mkdir \empty
robocopy /mir \empty folder
robocopy /mir c:\empty .
takeownпомогло мне, когда я по ошибке скопировал папку из системы Linux с помощью rsync, и у меня не было прав на удаление этой папки ... Даже робокопия не сработала. Спасибо
RMDIR [/S] [/Q] [drive:]path
RD [/S] [/Q] [drive:]path
/S Удаляет все каталоги и файлы в указанном каталоге в дополнение к самому каталогу. Используется для удаления дерева каталогов.
/Q Тихий режим, не спрашивайте, нормально ли удалить дерево каталогов с /S
Перейти к пути и вызвать эту команду.
rd /s /q "FOLDER_NAME"
/ s: удаляет указанный каталог и все подкаталоги, включая любые файлы. Используйте / s, чтобы удалить дерево.
/ q: запускает rmdir в тихом режиме. Удаляет каталоги без подтверждения.
/? : Отображение справки в командной строке.
Принятый ответ хорош, но, если у вас установлен Node, вы можете сделать это гораздо точнее с помощью библиотеки узлов «rimraf», которая позволяет создавать шаблоны. Если вы часто используете это (я делаю), просто установите его глобально.
yarn global add rimraf
тогда, например, шаблон, который я использую постоянно:
rimraf .\**\node_modules
или для однострочника, который позволит вам избежать глобальной установки, но это займет немного больше времени для динамической загрузки пакета:
npx rimraf .\**\node_modules
Попробуйте эту команду:
del /s foldername
rmdir / s dirname
Сначала давайте рассмотрим, что 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, выдаст ошибку, если цель не существует.
Следующий фрагмент сценария предполагает, что 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 и просто используете его.
через Powershell
Remove-Item -Recurse -Force "TestDirectory"
через командную строку
Вот что вам нужно сделать ...
Создайте командный файл со следующей строкой
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 *logs* -path .\ -directory -recurse | remove-item -confirm:$false -recurse -force
Замените журналы на имя каталога, который вы хотите удалить.
get-childitem выполняет поиск дочернего каталога с именем рекурсивно по текущему пути (.).
remove-item удаляет результат.
ИСПОЛЬЗУЙТЕ НА СВОЙ РИСК. ИНФОРМАЦИЯ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ». НЕ ПРОВЕРЕНО
Щелкните правой кнопкой мыши значок 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 :: Переименуйте все папки, которые приводят к такому файлу, к наименьшим возможным именам. Скажи одну букву именам. Продолжайте переименовывать вверх в иерархии папок. Благодаря этому вы эффективно уменьшите длину пути. Теперь, наконец, попробуйте удалить файл прямо сейчас.
Существует также deltree, если вы используете более старую версию Windows.
Мне очень нравится этот сайт для поиска команд: SS64: Del - Удалить файлы