Скажем, есть переменная с именем %pathtofolder%
, которая проясняет, что это полный путь к папке.
Я хочу удалить все файлы и подпапки в этом каталоге, но не сам каталог.
Но может быть ошибка типа «этот файл / папка уже используется» ... когда это происходит, нужно просто продолжить и пропустить этот файл / папку.
Есть ли какая-то команда для этого?
rm -rf path\to\folder
работает в Windows 10 (или может прийти из Git Bash ... в любом случае, если у вас есть, что стоит попробовать!)Ответы:
Вы можете использовать этот скрипт для очистки папки и файлов в
C:\Temp
исходном коде :Создайте пакетный файл (скажем, delete.bat), содержащий указанную выше команду. Перейдите в папку, в которой находится файл delete.bat, а затем выполните команду: delete.bat
источник
%p
rmdir
моя самая любимая команда для работы. Он работает для удаления огромных файлов и папок с подпапками. Резервная копия не создается, поэтому перед выполнением этой команды убедитесь, что вы скопировали свои файлы безопасно.Это автоматически удаляет папку и все файлы и подпапки.
источник
md FOLDERNAME
(см. Ответ от @rakoczyn ниже).cd "FOLDERNAME"
RD . /S /Q
Самое простое решение, которое я могу придумать, - это удалить весь каталог с помощью
Затем создайте этот каталог снова:
источник
Это удалит папки и файлы и оставит папку позади.
источник
2>nul
него выводится «Процесс не может получить доступ к файлу, потому что он используется другим процессом».RD /?
покажет вам простой способ очистить папку.CD mypath && RD /S .
будет достаточно. Мне не нравится, что вам приходится повторять свой путь дважды, хотя для длинных путей его становится трудно читать. Так что я бы просто добавилset p="mypath"
в начале.... удаляет все файлы и папки в данном каталоге, но не сам каталог.
источник
/A
для удаления файлов со скрытым набором атрибутов, и%dir%\*
их следует заключать в двойные кавычки, как, например,"%dir%\*"
для каталогов, содержащих пробел или один из этих символов&()[]{}^=;!'+,`~
. И командную строку FOR следует изменить на,for /F "eol=| delims=" %%I in ('dir "%dir%\*" /AD /B 2^>nul') do rd /Q /S "%dir%\%%I"
поскольку FOR игнорирует каталоги со скрытым набором атрибутов. DIR с параметрами/AD /B
выводит все каталоги только с их именами. Кстати,dir
это не хорошее название для переменной среды.Вы получите сообщение об ошибке, сообщающее, что команда RMDIR не может получить доступ к текущей папке, поэтому она не может удалить ее.
Обновление :
Из этого полезного комментария (спасибо Moritz Both ) вы можете добавить
&&
между ними, поэтомуRMDIR
не запустите, еслиCD
команда не будет выполнена (например, имя каталога с ошибкой):Из справки по командной строке Windows :
источник
cd [Your_Folder]
очень важно - я должен помнить об этом, чтобы не удалять сам каталог ...&&
между командами вместо разрыва строки, и вы в безопасности от сбой CD.RD расшифровывается как REMOVE Directory.
/ S: Удалить все файлы и подпапки в дополнение к самой папке. Используйте это, чтобы удалить все дерево папок.
/ Q: Тихо - не отображать подтверждение YN
Пример :
источник
/S
и что/Q
значитrd
эквивалентенrmdir
и удалит сам каталог, а не тот, который хочет OP.Я использую Powershell
Он удалит содержимое папки, а не саму папку.
источник
powershell -Command "Remove-Item 'PathToMyDirectory\*' -Recurse -Force"
Ни один из ответов, опубликованных в 2018-06-01, за исключением единственной командной строки, опубликованной foxidrive , действительно не удалил все файлы и все папки / каталоги в
%PathToFolder%
. По этой причине необходимо опубликовать еще один ответ с очень простой единой командной строкой для удаления всех файлов и подпапок папки, а также пакетный файл с более сложным решением, объясняющим, почему все остальные ответы, опубликованные в 2018-06-01 с использованием DEL и FOR с RD не удалось полностью очистить папку.Простое решение для единой командной строки, которое, конечно же, также можно использовать в командном файле:
Эта командная строка содержит три команды, выполняемые одна за другой.
Первая команда PUSHD помещает текущий путь к каталогу в стек, а затем создает
%PathToFolder%
текущий каталог для запуска процесса команды.Это также работает для путей UNC по умолчанию, поскольку расширения команд включены по умолчанию, и в этом случае PUSHD создает временную букву диска, которая указывает на указанный сетевой ресурс, а затем изменяет текущий диск и каталог, используя вновь определенную букву диска.
PUSHD выводит следующее сообщение об ошибке для обработки STDERR, если указанный каталог вообще не существует:
Это сообщение об ошибке подавляется путем перенаправления его
2>nul
на устройство NUL .Следующая команда RD выполняется только в том случае, если изменение текущего каталога для текущего командного процесса на указанный каталог прошло успешно, то есть указанный каталог вообще существует.
Команда RD с параметрами
/Q
и тихо/S
удаляет каталог со всеми подкаталогами, даже если указанный каталог содержит файлы или папки со скрытым атрибутом или с установленным атрибутом только для чтения. Системный атрибут никогда не препятствует удалению файла или папки.Не удаляются:
Папки, используемые в качестве текущего каталога для любого запущенного процесса. Все дерево папок в такой папке не может быть удалено, если папка используется в качестве текущего каталога для любого запущенного процесса.
Файлы, открытые в настоящее время любым запущенным процессом с правами доступа к файлу, установленными для открытия файла, чтобы предотвратить удаление файла во время открытия работающим приложением / процессом. Такой открытый файл также предотвращает удаление всего дерева папок в открытый файл.
Файлы / папки, для которых у текущего пользователя нет необходимых (NTFS) разрешений на удаление файла / папки, что также предотвращает удаление дерева папок в этот файл / папку.
Первая причина не удалять папку используется этой командной строкой для удаления всех файлов и подпапок указанной папки, но не самой папки. Папка временно становится текущей директорией для запуска командного процесса, который предотвращает удаление самой папки. Конечно, это приводит к выводу сообщения об ошибке командой RD :
Файл - это неправильный термин, поскольку в действительности папка используется другим процессом, текущим командным процессом, который выполнил команду RD . Ну, на самом деле папка для файловой системы специального файла с атрибутом файла каталогом , который объясняет это сообщение об ошибке. Но я не хочу углубляться в управление файловой системой.
Это сообщение об ошибке, как и все другие сообщения об ошибках, которые могут возникать по трем причинам, указанным выше, подавляется путем перенаправления его с
2>nul
дескриптора STDERR на NUL устройства .Третья команда, POPD , выполняется независимо от значения выхода команды RD .
POPD извлекает путь каталога, выдвинутый PUSHD из стека, и изменяет текущий каталог для запуска процесса команды на этот каталог, то есть восстанавливает исходный текущий каталог. POPD удаляет временную букву диска, созданную PUSHD в случае пути к папке UNC.
Примечание: POPD может молча прекратить восстановление первоначального текущего каталога в случае, если исходный текущий каталог был подкаталогом каталога для очистки, который больше не существует. В этом особом случае
%PathToFolder%
остается текущий каталог. Поэтому желательно запускать командную строку выше, а не из подкаталога%PathToFolder%
.Еще один интересный факт: я пробовал в командной строке также использовать UNC-путь, используя общий каталог
C:\Temp
с именем общего ресурсаTemp
и используя UNC-путь,\\%COMPUTERNAME%\Temp\CleanTest
назначенный переменной средыPathToFolder
в Windows 7. Если текущий каталог при запуске командной строки является подкаталогом общего локального каталога папка доступ с помощью UNC - пути, то естьC:\Temp\CleanTest\Subfolder1
,Subfolder1
удаляются с помощью РДА , а следующий POPD терпит неудачу молча делаюC:\Temp\CleanTest\Subfolder1
снова текущий каталог в результатеZ:\CleanTest
оставшегося в качестве текущего каталога для процесса команды работает. Таким образом, в этом очень особом случае временная буква диска остается до тех пор, пока текущий каталог не будет изменен, например, с помощьюcd /D %SystemRoot%
в локальный каталог действительно существует. К сожалению, POPD не завершается со значением больше 0, если не удается восстановить исходный текущий каталог, что делает невозможным обнаружение этого особого состояния ошибки, используя только код выхода POPD . Однако можно предположить, что никто никогда не сталкивался с этим особенным случаем ошибки, поскольку пути UNC обычно не используются для доступа к локальным файлам и папкам.Чтобы лучше понять используемые команды, откройте окно командной строки, выполните там следующие команды и внимательно прочитайте справку, отображаемую для каждой команды.
pushd /?
popd /?
rd /?
Одна строка с несколькими командами с использованием командного файла Windows объясняет операторов
&&
и&
используется здесь.Теперь давайте посмотрим на решение для пакетных файлов, используя команду DEL для удаления файлов в
%PathToFolder%
и FOR и RD для удаления вложенных папок в%PathToFolder%
.Пакетный файл сначала гарантирует, что переменная среды
PathToFolder
действительно определена с путем к папке без двойных кавычек и без обратной косой черты в конце. Обратная косая черта в конце не будет проблемой, но двойные кавычки в пути к папке могут быть проблематичными, посколькуPathToFolder
во время выполнения пакетного файла значение объединяется с другими строками.Важны две строки:
Команда DEL используется для удаления всех файлов в указанном каталоге.
/A
необходима для обработки всех файлов, включая файлы со скрытым атрибутом, который DEL игнорировал бы без использования опции/A
./F
необходима для принудительного удаления файлов с установленным атрибутом только для чтения./Q
необходима для тихого удаления нескольких файлов, не запрашивая пользователя, действительно ли нужно удалить несколько файлов.>nul
необходимо перенаправить вывод имен файлов, записанных для обработки STDOUT, на устройство NUL, которое нельзя удалить из-за того, что файл открыт в данный момент или у пользователя нет прав на удаление файла.2>nul
необходимо перенаправить вывод сообщения об ошибке для каждого файла, который нельзя удалить из дескриптора STDERR, на устройство NUL .Команды FOR и RD используются для удаления всех подкаталогов в указанном каталоге. Но
for /D
не используется, поскольку FOR игнорирует в этом случае подкаталоги с установленным атрибутом hidden. По этой причинеfor /F
используется для запуска следующей командной строки в отдельном командном процессе, запущенном в фоновом режиме с помощью%ComSpec% /c
:DIR выводит в голом формате из-за
/B
записей каталога с атрибутомD
, то есть имен всех подкаталогов в указанном каталоге, независимо от других атрибутов, таких как скрытый атрибут без пути.2>nul
используется для перенаправления вывода сообщения об ошибке DIR на каталог, не найденный из дескриптора STDERR, на устройство NUL .Оператор перенаправления
>
должен быть экранирован с помощью символа вставки,^
в командной строке FOR интерпретироваться как литеральный символ, когда интерпретатор команд Windows обрабатывает эту командную строку перед выполнением команды FOR, которая выполняет встроеннуюdir
командную строку в отдельном запущенном командном процессе. на заднем фоне.FOR обрабатывает захваченный вывод, записанный для обработки STDOUT запущенного командного процесса, которые являются именами подкаталогов без пути и никогда не заключаются в двойные кавычки.
Параметр FOR with
/F
игнорирует пустые строки, которые здесь не встречаются, поскольку DIR с параметром/B
не выводит пустые строки.FOR также игнорирует строки, начинающиеся с точки с запятой, которая является символом конца строки по умолчанию. Имя каталога может начинаться с точки с запятой. По этой причине
eol=|
используется для определения символа вертикальной черты как символа конца строки, который ни один каталог или файл не может иметь в своем имени.FOR разделит строку на подстроки, используя пробел и горизонтальную табуляцию в качестве разделителей, и назначит только первую строку с пробелом / табуляцией для указанной переменной цикла
I
. Такое поведение разделения здесь нежелательно, поскольку имя каталога может содержать один или несколько пробелов. Поэтомуdelims=
используется для определения пустого списка разделителей, чтобы отключить поведение разделения строк и получить присвоение переменной циклаI
, всегда полное имя каталога.Команда FOR запускает команду RD для каждого имени каталога без пути, поэтому в командной строке RD необходимо еще раз указать путь к папке, который объединяется с именем подпапки.
Чтобы понять используемые команды и то, как они работают, откройте окно командной строки, выполните там следующие команды и внимательно прочитайте все страницы справки, отображаемые для каждой команды.
del /?
dir /?
echo /?
endlocal /?
for /?
goto /?
if /?
rd /?
rem /?
set /?
setlocal /?
источник
Используйте Блокнот, чтобы создать текстовый документ и скопировать / вставить это:
Выберите Сохранить как и имя файла:
Сохранить как тип: Все файлы и нажмите Saveкнопку.
Он работает на любой учетной записи (администратор или обычный пользователь). Просто запустите это!
Я использую временную переменную в этом примере, но вы можете использовать любую другую! PS: только для ОС Windows!
источник
Чтобы удалить файл:
Чтобы удалить папку со всеми файлами в ней:
Удалить все файлы из определенной папки (не удаляя саму папку) немного сложнее.
del /s *.*
не может удалить папки, но удаляет файлы из всех подпапок. Итак, нужны две команды:источник
/A
для удаления также файлов с установленным скрытым атрибутом и опция/F
для удаления также файлов с установленным атрибутом только для чтения и двойными кавычками вокруг последнего аргумента. Такdel /A /F /Q "PATH_TO_FOLDER\*"
было бы лучше. И командную строку FOR следует изменить на,for /F "eol=| delims=" %%I in ('dir "PATH_TO_FOLDER\*" /AD /B 2^>nul') do rd /Q /S "PATH_TO_FOLDER\%%I"
поскольку FOR игнорирует каталоги со скрытым набором атрибутов. DIR с параметрами/AD /B
выводит все каталогиPATH_TO_FOLDER
только с их именами.Вы можете сделать это, используя следующую команду для удаления всего содержимого и самой родительской папки:
источник
Я попробовал несколько из этих подходов, но ни один не работал должным образом.
Я нашел этот двухэтапный подход на сайте командной строки Windows :
Он работал именно так, как мне нужно, и как указано в ОП.
источник
forfiles /P "%pathtofolder%" /M * /C "%SystemRoot%\System32\cmd.exe /C if @isdir==FALSE (del /A /F @file) else rd /Q /S @file"
DEL/A
для удаления также файлов со скрытым атрибутом, установленным как иначе DEL выдаст сообщение об ошибке «не найден» для каждого скрытого файла в%pathtofolder%
. Добавлена опция DEL/F
для удаления также файлов с установленным атрибутом «только для чтения»,%pathtofolder%
иначе DEL выдаст сообщение об ошибке «Отказано в доступе».cmd.exe
экземпляра для каждого файла и каждого каталога в%pathtofolder%
. Преимущество состоит в том, что FORFILES не игнорирует каталоги со скрытым атрибутом, установленным как FOR .источник
for /F "eol=| delims=" %%I in ('dir "%TEMP%\*" /AD /B 2^>nul') do rd /Q /S "%TEMP%\%%I"
поскольку FOR игнорирует каталоги со скрытым набором атрибутов. DIR с параметрами/AD /B
выводит все каталоги%TEMP%
только с их именами.Использование:
Это удаляет все файлы и подпапки в
%pathtofolder%
, включая файлы только для чтения, и не запрашивается подтверждение.источник