Мне нужен способ рекурсивного удаления папки и ее дочерних элементов.
Для этого есть готовый инструмент или мне нужно написать его?
DEL/S
не удаляет каталоги.
DELTREE
был удален из Windows 2000+
Мне нужен способ рекурсивного удаления папки и ее дочерних элементов.
Для этого есть готовый инструмент или мне нужно написать его?
DEL/S
не удаляет каталоги.
DELTREE
был удален из Windows 2000+
RMDIR или RD, если вы используете классическую командную строку (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 в тихом режиме. Удаляет каталоги без подтверждения.
/?: Отображает справку в командной строке.
Для удаления каталога (независимо от того, существует он), используйте следующее:
if exist myfolder ( rmdir /s/q myfolder )
rmdir /S /Q %DIRNAME%
rmdir/s dirname
Попробуйте выполнить следующую команду:
del /s foldername
Сначала рассмотрим, что делает 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 и просто используйте это.
Вы можете установить GnuWin32 и использовать * nix-команды изначально на окнах. Я устанавливаю это, прежде чем устанавливать что-либо еще на новую версию 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
Принятый ответ хорош, но, если у вас установлен Node, вы можете сделать это гораздо точнее с помощью библиотеки узлов "rimraf", которая позволяет создавать шаблоны. Если вы часто используете это (я делаю), просто установите его глобально.
yarn global add rimraf
тогда, например, шаблон, который я использую постоянно:
rimraf .\**\node_modules
или для однострочника, который позволяет избежать глобальной установки, но для динамической загрузки пакета требуется немного больше времени:
npx rimraf .\**\node_modules
вот что сработало для меня:
Попробуйте уменьшить длину пути. i.e:: Переименуйте все папки, которые приводят к такому файлу, к наименьшим возможным именам. Скажите одно письмо. Продолжайте переименование вверх в иерархии папок. Благодаря этому u эффективно уменьшает длину пути. Теперь попробуйте сразу удалить файл.
Использование Powershell 5.1
get-childitem *logs* -path .\ -directory -recurse | remove-item -confirm:$false -recurse -force
Замените журналы на имя каталога, который вы хотите удалить.
get-childitem выполняет поиск дочернего каталога с именем рекурсивно по текущему пути (.).
remove-item удаляет результат.
через Powershell
Remove-Item -Recurse -Force "TestDirectory"
через командную строку
Щелкните правой кнопкой мыши значок Windows (обычно слева внизу)> нажмите "Windows Powershell (Admin)">, используйте эту команду (с должной осторожностью вы можете легко удалить все свои файлы, если не будете осторожны):
rd -r -include *.* -force .\somedir\
Где somedir
- это непустой каталог, который вы хотите удалить.
Обратите внимание, что с внешними подключенными дисками или дисками с проблемами Windows иногда ведет себя странно - она не выдает ошибку при удалении (или любой попытке копирования), но каталог не удаляется (или не копируется) в соответствии с инструкциями.
http://www.computerhope.com/delhlp.htm
del /s
Существует также deltree, если вы используете более старую версию Windows.
Мне очень нравится этот сайт для поиска команд: SS64: Del - Удалить файлы
del/s/q directorytobedeleted