Как удалить файлы / подпапки в определенном каталоге в командной строке в Windows

308

Скажем, есть переменная с именем %pathtofolder%, которая проясняет, что это полный путь к папке.

Я хочу удалить все файлы и подпапки в этом каталоге, но не сам каталог.

Но может быть ошибка типа «этот файл / папка уже используется» ... когда это происходит, нужно просто продолжить и пропустить этот файл / папку.

Есть ли какая-то команда для этого?

Дениз Зоетман
источник
Возможный дубликат того, что когда-либо случалось с дельтри, и что его заменяет?
Росберг Линхарес
Это безумие, как трудно Windows удалить папки ... Или создать папку, начинающуюся с точки ... Слава богу за интеграцию Bash в Windows! rm -rf path\to\folderработает в Windows 10 (или может прийти из Git Bash ... в любом случае, если у вас есть, что стоит попробовать!)
Stijn de Witt

Ответы:

256

Вы можете использовать этот скрипт для очистки папки и файлов в C:\Temp исходном коде :

del /q "C:\Temp\*"
FOR /D %%p IN ("C:\Temp\*.*") DO rmdir "%%p" /s /q

Создайте пакетный файл (скажем, delete.bat), содержащий указанную выше команду. Перейдите в папку, в которой находится файл delete.bat, а затем выполните команду: delete.bat

Iain
источник
20
Я пробовал, но, к сожалению, файлы, которые не были удалены, удаляются только подпапки. Например, у меня есть папка с именем Test. Он содержит 2 папки с именами «Ripon» и «Wasim» и содержит файл с именем «riponalwasim.txt». Подпапки Ripon и Wasim были удалены, но riponalwasim.txt не был удален.
Рипон Аль-Васим
16
Используйте одиночный знак процента, если вы хотите работать напрямую из командной строки, например%p
Alex
2
Грустно, что это занимает 2 строки, но, по крайней мере, это работает! Я устал искать работающий «однострочник» и пойду с этим, спасибо!
ночной кодер
2
Вы можете использовать оператор «&&» для выполнения двух команд в одной строке без файла bat (обратите внимание на один «%» вместо «%%»). del / s / q "myfolder *" && FOR / D% p IN ("myfolder *") DO rmdir "% p" / s / q
ravinsp
<for / F "delims =" %% i in ('dir / b / a-d') do (echo del "%% i" / q)> может помочь для файлов (просто удалите это эхо)
grenix
340

rmdir моя самая любимая команда для работы. Он работает для удаления огромных файлов и папок с подпапками. Резервная копия не создается, поэтому перед выполнением этой команды убедитесь, что вы скопировали свои файлы безопасно.

RMDIR "FOLDERNAME" /S /Q

Это автоматически удаляет папку и все файлы и подпапки.

Суреш
источник
65
Похоже, это удаляет путь к каталогу, который ОП хотел сохранить.
Fuzz Evans
4
Это приведет к удалению самой папки, поэтому вам нужно добавить еще одну команду: md FOLDERNAME(см. Ответ от @rakoczyn ниже).
thdoan
4
Что вы подразумеваете под «резервное копирование создано» здесь? Я не вижу ничего, что могло бы создать какую-либо резервную копию ...
Пол Грок
1
Справочник не пустой Сообщение пришло как ответ!
Джамшайд Кямран
10
Чтобы не удалять саму папку, сделайте ее текущей папкой, а затем используйте «.» как FOLDERNAME. Повторное создание этого впоследствии не обязательно то же самое, потому что ACL могли быть потеряны. cd "FOLDERNAME" RD . /S /Q
Мориц Оба
85

Самое простое решение, которое я могу придумать, - это удалить весь каталог с помощью

RD /S /Q folderPath

Затем создайте этот каталог снова:

MD folderPath
wojciech_rak
источник
5
Что делать, если у вас есть разрешение на удаление, но не создание новых папок? Я надеюсь, что это возможно :)
Сэнди
13
Это плохое решение, так как оно приводит к гонке в файловой системе за узел каталога, то есть вторая команда может потерпеть неудачу, если выполняется сразу после нее.
Рок Стрниша
22
Кроме того , плохое решение , если каталог имеет специальные разрешения , которые вы просто Nuked гм (упс)
Бессмертный Синий
Не откладывайте на ответ: «Каталог не пустой». Просто дважды введите команду :-)
Kieran Ryan
1
RD и RMDIR - это одна и та же команда, и, поскольку вы опубликовали этот ответ через 9 месяцев после того, как кто-то дал тот же ответ, почему люди дают вам очки?
Переключить
51

Это удалит папки и файлы и оставит папку позади.

pushd "%pathtofolder%" && (rd /s /q "%pathtofolder%" 2>nul & popd)
foxidrive
источник
4
Для тех, кто не уверен в этом подходе: он определенно не создает каталог заново. Без 2>nulнего выводится «Процесс не может получить доступ к файлу, потому что он используется другим процессом».
Рок Стрниша
6
Я ненавижу, что Windows не может удалить файлы и папки, используемые какой-либо программой. И мне нравится, что вы использовали это в свою пользу в этой строчке.
andref
Так что это убер-магия, как мы очищаем папку в Windows ?? Впечатляет :)
mlvljr
3
@mlvljr Только если вы хотите сохранить родительскую папку тоже. RD /?покажет вам простой способ очистить папку.
foxidrive
1
Это хорошо, если вам нужно вернуться на исходную позицию, иначе просто CD mypath && RD /S .будет достаточно. Мне не нравится, что вам приходится повторять свой путь дважды, хотя для длинных путей его становится трудно читать. Так что я бы просто добавил set p="mypath"в начале.
Амит Найду
39
@ECHO OFF

SET THEDIR=path-to-folder

Echo Deleting all files from %THEDIR%
DEL "%THEDIR%\*" /F /Q /A

Echo Deleting all folders from %THEDIR%
FOR /F "eol=| delims=" %%I in ('dir "%THEDIR%\*" /AD /B 2^>nul') do rd /Q /S "%THEDIR%\%%I"
@ECHO Folder deleted.

EXIT

... удаляет все файлы и папки в данном каталоге, но не сам каталог.

thepip3r
источник
4
это должен быть правильный ответ .. просто сделайте простой .. deletemyfoldercontents.bat файл .. вставьте ваш путь, и он работает как шарм ..
timbrown
3
В командной строке DEL также отсутствует опция /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это не хорошее название для переменной среды.
Мофи
1
не удаляет подпапку
RMiranda
1
@RMiranda, в моих тестах, он делает именно так, как просил ОП. У вас есть случай, когда он не удаляет подпапки?
thepip3r
Отвечает ли этот ответ требованию «может быть ошибка типа« этот файл / папка уже используется »... когда это происходит, он должен просто продолжить и пропустить этот файл / папку». ?
Питер Мортенсен
30
CD [Your_Folder]
RMDIR /S /Q .

Вы получите сообщение об ошибке, сообщающее, что команда RMDIR не может получить доступ к текущей папке, поэтому она не может удалить ее.

Обновление :

Из этого полезного комментария (спасибо Moritz Both ) вы можете добавить &&между ними, поэтому RMDIRне запустите, если CDкоманда не будет выполнена (например, имя каталога с ошибкой):

CD [Your_Folder] && RMDIR /S /Q .

Из справки по командной строке Windows :

/ S: удаляет дерево каталогов (указанный каталог и все его подкаталоги, включая все файлы).

/ Q: Указывает тихий режим. Не запрашивает подтверждения при удалении дерева каталогов. (Обратите внимание, что / q работает, только если указан / s.)

O.Badr
источник
1
Это идеально подходит для очистки temp, но это cd [Your_Folder]очень важно - я должен помнить об этом, чтобы не удалять сам каталог ...
sage
5
Это правильное решение. Добавьте &&между командами вместо разрыва строки, и вы в безопасности от сбой CD.
Мориц Оба
Это простое и правильное решение. Даже работает с командной оболочкой Azure!
Филипп
довольно плохое решение ... Мне, например, нужно это удаление командной строки для обновления SVN - я хочу удалить все файлы и папки, прежде чем я сделаю обновление SVN, потому что могут быть некоторые изменения на машине, где я использую это, но актуально только проверенные в пунктах. Делать RMDIR / S / Q. также удаляет ссылку SVN и, следовательно, больше не делает папку svn
Dominik Lemberger,
Чем это отличается от предыдущих четырех ответов?
Питер Мортенсен
9

RD расшифровывается как REMOVE Directory.

/ S: Удалить все файлы и подпапки в дополнение к самой папке. Используйте это, чтобы удалить все дерево папок.

/ Q: Тихо - не отображать подтверждение YN

Пример :

RD /S /Q C:/folder_path/here
Сириш Ярлагадда
источник
1
проголосовал за то, что был единственным, кто объяснил, что /Sи что /Qзначит
SourceVisor
2
Номер rdэквивалентен rmdirи удалит сам каталог, а не тот, который хочет OP.
WesternGun
Отвечает ли этот ответ требованию «может быть ошибка типа« этот файл / папка уже используется »... когда это происходит, он должен просто продолжить и пропустить этот файл / папку.»? Например, прерывается ли он полностью вместо продолжения?
Питер Мортенсен
8

Я использую Powershell

Remove-Item c:\scripts\* -recurse

Он удалит содержимое папки, а не саму папку.

rhellem
источник
Ответ rhellem недавно, но это единственный ответ, который действительно сделает это для меня. (Win 8.1, не по выбору)
филолог
2
Из командной строки пакета:powershell -Command "Remove-Item 'PathToMyDirectory\*' -Recurse -Force"
Росберг Линхарес
Обратите внимание, что "*" необходимо, или оно удалит папку.
mhenry1384
7

Ни один из ответов, опубликованных в 2018-06-01, за исключением единственной командной строки, опубликованной foxidrive , действительно не удалил все файлы и все папки / каталоги в %PathToFolder%. По этой причине необходимо опубликовать еще один ответ с очень простой единой командной строкой для удаления всех файлов и подпапок папки, а также пакетный файл с более сложным решением, объясняющим, почему все остальные ответы, опубликованные в 2018-06-01 с использованием DEL и FOR с RD не удалось полностью очистить папку.


Простое решение для единой командной строки, которое, конечно же, также можно использовать в командном файле:

pushd "%PathToFolder%" 2>nul && ( rd /Q /S "%PathToFolder%" 2>nul & popd )

Эта командная строка содержит три команды, выполняемые одна за другой.

Первая команда PUSHD помещает текущий путь к каталогу в стек, а затем создает %PathToFolder%текущий каталог для запуска процесса команды.

Это также работает для путей UNC по умолчанию, поскольку расширения команд включены по умолчанию, и в этом случае PUSHD создает временную букву диска, которая указывает на указанный сетевой ресурс, а затем изменяет текущий диск и каталог, используя вновь определенную букву диска.

PUSHD выводит следующее сообщение об ошибке для обработки STDERR, если указанный каталог вообще не существует:

Система не может найти указанный путь.

Это сообщение об ошибке подавляется путем перенаправления его 2>nulна устройство NUL .

Следующая команда RD выполняется только в том случае, если изменение текущего каталога для текущего командного процесса на указанный каталог прошло успешно, то есть указанный каталог вообще существует.

Команда RD с параметрами /Qи тихо/S удаляет каталог со всеми подкаталогами, даже если указанный каталог содержит файлы или папки со скрытым атрибутом или с установленным атрибутом только для чтения. Системный атрибут никогда не препятствует удалению файла или папки.

Не удаляются:

  1. Папки, используемые в качестве текущего каталога для любого запущенного процесса. Все дерево папок в такой папке не может быть удалено, если папка используется в качестве текущего каталога для любого запущенного процесса.

  2. Файлы, открытые в настоящее время любым запущенным процессом с правами доступа к файлу, установленными для открытия файла, чтобы предотвратить удаление файла во время открытия работающим приложением / процессом. Такой открытый файл также предотвращает удаление всего дерева папок в открытый файл.

  3. Файлы / папки, для которых у текущего пользователя нет необходимых (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%.

@echo off
setlocal EnableExtensions DisableDelayedExpansion

rem Clean the folder for temporary files if environment variable
rem PathToFolder is not defined already outside this batch file.
if not defined PathToFolder set "PathToFolder=%TEMP%"

rem Remove all double quotes from folder path.
set "PathToFolder=%PathToFolder:"=%"

rem Consisted the folder path only of double quotes?
if not defined PathToFolder goto EndCleanFolder

rem Remove a backslash at end of folder path.
if "%PathToFolder:~-1%" == "\" set "PathToFolder=%PathToFolder:~0,-1%"

rem Consisted folder path only of a backslash (with one or more double quotes)?
if not defined PathToFolder goto EndCleanFolder

rem Delete all files in specified folder including files with hidden
rem or read-only attribute set, except the files currently opened by
rem a running process which prevents deletion of the file while being
rem opened by the application, or on which the current user has not
rem the required permissions to delete the file.
del /A /F /Q "%PathToFolder%\*" >nul 2>nul

rem Delete all subfolders in specified folder including those with hidden
rem attribute set recursive with all files and subfolders, except folders
rem being the current directory of any running process which prevents the
rem deletion of the folder and all folders above, folders containing a file
rem opened by the application which prevents deletion of the file and the
rem entire folder structure to this file, or on which the current user has
rem not the required permissions to delete a folder or file in folder tree
rem to delete.
for /F "eol=| delims=" %%I in ('dir "%PathToFolder%\*" /AD /B 2^>nul') do rd /Q /S "%PathToFolder%\%%I" 2>nul

:EndCleanFolder
endlocal

Пакетный файл сначала гарантирует, что переменная среды PathToFolderдействительно определена с путем к папке без двойных кавычек и без обратной косой черты в конце. Обратная косая черта в конце не будет проблемой, но двойные кавычки в пути к папке могут быть проблематичными, поскольку PathToFolderво время выполнения пакетного файла значение объединяется с другими строками.

Важны две строки:

del /A /F /Q "%PathToFolder%\*" >nul 2>nul
for /F "eol=| delims=" %%I in ('dir "%PathToFolder%\*" /AD /B 2^>nul') do rd /Q /S "%PathToFolder%\%%I" 2>nul

Команда DEL используется для удаления всех файлов в указанном каталоге.

  • Опция /Aнеобходима для обработки всех файлов, включая файлы со скрытым атрибутом, который DEL игнорировал бы без использования опции /A.
  • Опция /Fнеобходима для принудительного удаления файлов с установленным атрибутом только для чтения.
  • Опция /Qнеобходима для тихого удаления нескольких файлов, не запрашивая пользователя, действительно ли нужно удалить несколько файлов.
  • >nulнеобходимо перенаправить вывод имен файлов, записанных для обработки STDOUT, на устройство NUL, которое нельзя удалить из-за того, что файл открыт в данный момент или у пользователя нет прав на удаление файла.
  • 2>nulнеобходимо перенаправить вывод сообщения об ошибке для каждого файла, который нельзя удалить из дескриптора STDERR, на устройство NUL .

Команды FOR и RD используются для удаления всех подкаталогов в указанном каталоге. Но for /Dне используется, поскольку FOR игнорирует в этом случае подкаталоги с установленным атрибутом hidden. По этой причине for /Fиспользуется для запуска следующей командной строки в отдельном командном процессе, запущенном в фоновом режиме с помощью %ComSpec% /c:

dir "%PathToFolder%\*" /AD /B 2>nul

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 /?
Mofi
источник
5

Используйте Блокнот, чтобы создать текстовый документ и скопировать / вставить это:

rmdir /s/q "%temp%"
mkdir "%temp%"

Выберите Сохранить как и имя файла:

delete_temp.bat

Сохранить как тип: Все файлы и нажмите Saveкнопку.

Он работает на любой учетной записи (администратор или обычный пользователь). Просто запустите это!

Я использую временную переменную в этом примере, но вы можете использовать любую другую! PS: только для ОС Windows!

Филипп Георгиевич
источник
довольно простое и чистое решение
Карлос Лю
4

Чтобы удалить файл:

del PATH_TO_FILE

Чтобы удалить папку со всеми файлами в ней:

rmdir /s /q PATH_TO_FOLDER

Удалить все файлы из определенной папки (не удаляя саму папку) немного сложнее. del /s *.*не может удалить папки, но удаляет файлы из всех подпапок. Итак, нужны две команды:

del /q PATH_TO_FOLDER\*.*
for /d %i in (PATH_TO_FOLDER\*.*) do @rmdir /s /q "%i"
Максим Суслов
источник
Да, это правильно. Должно быть два шага. Это заслуживает большего количества голосов, потому что объясняет, почему, по сравнению с более голосуемым ответом выше.
WesternGun
В командной строке DEL также отсутствует опция /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только с их именами.
Мофи
Чем это отличается от (некоторых) предыдущих ответов?
Питер Мортенсен
4

Вы можете сделать это, используя следующую команду для удаления всего содержимого и самой родительской папки:

RMDIR [/S] [/Q] [drive:]path            
Рипон Аль Васим
источник
Чем это отличается от двух предыдущих ответов?
Питер Мортенсен
Отвечает ли этот ответ требованию «может быть ошибка типа« этот файл / папка уже используется »... когда это происходит, он должен просто продолжить и пропустить этот файл / папку». ?
Питер Мортенсен
1

Я попробовал несколько из этих подходов, но ни один не работал должным образом.

Я нашел этот двухэтапный подход на сайте командной строки Windows :

forfiles /P %pathtofolder% /M * /C "cmd /c if @isdir==FALSE del @file"

forfiles /P %pathtofolder%  /M * /C "cmd /c if @isdir==TRUE rmdir /S /Q @file"

Он работал именно так, как мне нужно, и как указано в ОП.

Пол Хаан
источник
Две командные строки можно объединить в одну командную строку: добавлена опция 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 .
Мофи
Re "Это сработало именно так, как мне нужно и как указано в ОП". : Проверили ли вы требование «может быть ошибка типа« этот файл / папка уже используется »... когда это произойдет, нужно просто продолжить и пропустить этот файл / папку». ?
Питер Мортенсен
0
@ECHO OFF
rem next line removes all files in temp folder
DEL /A /F /Q /S "%temp%\*.*"
rem next line cleans up the folder's content
FOR /D %%p IN ("%temp%\*.*") DO RD "%%p" /S /Q
Роби
источник
2-я строка удаляет файлы в каждом файле из всех папок временного каталога Windows, а 3-я строка очищает каталоги, включая их содержимое.
Роби
Командная строка FOR должна быть изменена на, for /F "eol=| delims=" %%I in ('dir "%TEMP%\*" /AD /B 2^>nul') do rd /Q /S "%TEMP%\%%I"поскольку FOR игнорирует каталоги со скрытым набором атрибутов. DIR с параметрами /AD /Bвыводит все каталоги %TEMP%только с их именами.
Мофи
Документация для DEL . Я думаю, что вы на правильном пути с / F: «Игнорировать настройки только для чтения и удалить в любом случае (FORCE)»
Питер Мортенсен
-10

Использование:

del %pathtofolder%\*.*   /s /f  /q

Это удаляет все файлы и подпапки в %pathtofolder% , включая файлы только для чтения, и не запрашивается подтверждение.

Alon
источник
9
Для меня это оставляет пустые подпапки в% pathtofolder%.
DH
35
Он НЕ удаляет подпапки в% pathtofolder%. Так плохо, что у меня нет репутации, чтобы опровергнуть этот ложный ответ
Виталий Корсаков
1
Как отметил Виталий Корсаков, это удаляет все файлы и файлы из подкаталогов, но оставляет подкаталоги на месте, которое ОП также спрашивал, как удалить.
Fuzz Evans
6
Хотя эта команда оставляет пустые папки, она гораздо ближе к тому, что было запрошено, чем принятый ответ. Конечно, это зависит от обстоятельств. В моем случае я предпочел бы иметь пустые папки, чем файлы, оставленные в корневом каталоге.
MarcusUA
но как мы можем удалить папки и подпапки, которые были открыты в общем сетевом ресурсе, когда другой клиентский компьютер открывает общий ресурс, имеющий доступ для записи в эту папку ... Команда psfile и net files закроет файловый сеанс, но снова через несколько секунд создаст автоматически другой сеанс для этого пользователя на сервере ...
user1954762