Як видалити файли / підпапки в певному каталозі в командному рядку в 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


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
Це, здається, видалить папку шляху, яку хотів зберегти ОП.
Фуз Еванс

4
Це видалить саму папку, тому вам потрібно буде додати ще одну команду: md FOLDERNAME(див. Відповідь від @rakoczyn нижче).
thoan

4
Що ви маєте на увазі під "створюється резервна копія" тут? Я не бачу нічого, що створило б резервну копію ...
Пол Грок

1
Каталог не порожній Повідомлення надійшло як відповідь!
Джамшайд Камран

10
Щоб не видаляти саму папку, перетворіть її в поточну каталог раніше, а потім використовуйте ". як FOLDERNAME. Після цього його повторне створення не обов'язково, тому що ACL можуть бути втрачені. cd "FOLDERNAME" RD . /S /Q
Моріц обидва

85

Найпростішим рішенням, про який я можу придумати, є видалення всього каталогу

RD /S /Q folderPath

Потім знову створіть цей каталог:

MD folderPath

5
що робити, якщо ви надаєте дозвіл на видалення, але не створення нових папок ?? Я сподіваюся, що це можливо :)
Сенді

13
Це неправильне рішення, оскільки воно вводить гонку у файловій системі для вузла каталогу, тобто друга команда може вийти з ладу, якщо виконана відразу після.
Рок Стрішні

22
Крім того, неправильне рішення, якщо у каталозі є спеціальні дозволи, ви щойно нанизували ах (вой)
Безсмертний синій

Не відкладіть у відповідь: "Каталог не порожній", просто двічі випустіть команду :-)
Kieran Ryan

1
RD і RMDIR - одна і та ж команда, і оскільки ви опублікували цю відповідь через 9 місяців після того, як хтось заявив ту ж відповідь, чому люди дають вам бали?
Переключення

51

Це видалить папки та файли і залишить папку позаду.

pushd "%pathtofolder%" && (rd /s /q "%pathtofolder%" 2>nul & popd)

4
Для тих, хто не впевнений у такому підході: він точно не відтворює каталог. Без 2>nulцього виводиться "Процес не може отримати доступ до файлу, оскільки він використовується іншим процесом."
Рок Стрішні

6
Я ненавиджу, що Windows не може видалити файли та папки, якими користується якась програма. І мені подобається, що ти використовував це на свою користь у цьому одноколісному.
andref

Отже, ця uber-магія - це те, як ми спорожнюємо папку в 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

... видаляє всі файли та папки під цим каталогом, але не сам каталог.


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виводить у всі каталоги лише їх назви. BTW: dirне є гарною назвою змінної середовища.
Мофі

1
не видаляє підпапку
RMiranda

1
@RMiranda, в моїх тестах, це робить саме так, як просив ОП. Чи є у вас випадок, коли він не видаляє підпапки?
thepip3r

Чи відповідає ця відповідь вимозі "може виникнути помилка на кшталт" цей файл / папка вже використовується "... коли це станеться, слід просто продовжити і пропустити цей файл / папку." ?
Пітер Мортенсен

30
CD [Your_Folder]
RMDIR /S /Q .

Ви отримаєте повідомлення про помилку, яке повідомляє вам, що команда RMDIR не може отримати доступ до поточної папки, тому вона не може її видалити.

Оновлення :

З цього корисного коментаря (спасибі Moritz обом ) ви можете додавати &&між, тому RMDIRне запускатиметься, якщо CDкоманда не працює (наприклад, неправильно вказане ім'я каталогу):

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

З посилання на командний рядок Windows :

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

/ Q: Вказує тихий режим. Не вимагає підтвердження під час видалення дерева каталогів. (Зверніть увагу, що / q працює, лише якщо вказано / s.)


1
Це ідеально підходить для спорожнення темп, але cd [Your_Folder]це надзвичайно важливо - я повинен пам’ятати, що я не видаляю сам каталог ...
мудрець

5
Це правильне рішення. Додайте &&між командами замість розриву рядка, і ви захищені від несправного компакт-диска.
Моріц обидва

Це просте і правильне рішення. Навіть працює з командною оболонкою Azure!
Філіпп

досить погане рішення ... Мені, наприклад, потрібне видалення цього командного рядка для оновлення svn - я хочу видалити всі файли та папки, перш ніж зробити оновлення svn, оскільки на машині, де я цим користуюсь, можуть бути деякі зміни, але відповідні є лише зареєстрованими елементами. Робити RMDIR / S / Q. також видаляє посилання SVN, і тому більше не робить папку svn
Домінік Лембергер,

Чим це відрізняється від попередніх чотирьох відповідей?
Пітер Мортенсен

9

RD розшифровується як REMOVE Directory.

/ S: Видаліть усі файли та підпапки, крім самої папки. Використовуйте це, щоб видалити ціле дерево папок.

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

Приклад:

RD /S /Q C:/folder_path/here

1
прихильний за те, що єдиний пояснив, що /Sі що /Qозначає
SourceVisor

2
Ні. rdЕквівалентно rmdirта видалить сам каталог, а не те, що хоче ОП.
WesternGun

Чи відповідає ця відповідь вимозі "може виникнути помилка на кшталт" цей файл / папка вже використовується "... коли це станеться, він повинен просто продовжувати і пропускати цей файл / папку." Наприклад, чи повністю припиняється, а не продовжувати?
Пітер Мортенсен

8

Я використовую Powershell

Remove-Item c:\scripts\* -recurse

Це видалить вміст папки, а не саму папку.


Відповідь Реллема недавня, але це єдина відповідь, яка насправді зробить це для мене. (Виграйте 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 - ігнорування в цьому випадку підкаталогів із прихованим набором атрибутів. З цієї причини for /Fвикористовується наступний командний рядок в окремому командному процесі, розпочатому у фоновому режимі з %ComSpec% /c:

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

DIR виводиться в голому форматі через /Bзаписи в каталозі з атрибутом D, тобто імена всіх підкаталогів у вказаному каталозі незалежно від інших атрибутів, таких як прихований атрибут без шляху. 2>nulвикористовується для переадресації повідомлення про помилку, виведеного DIR у жодному каталозі, знайденому з ручки STDERR на пристрій NUL .

Оператору переадресації >слід уникати символу caret, ^у командному рядку FOR інтерпретувати як буквальний символ, коли інтерпретатор команд Windows обробляє цей командний рядок перед виконанням команди FOR, яка виконує вбудований dirкомандний рядок в окремому розпочатому командному процесі у фоновому режимі.

FOR обробляє захоплений вихід, записаний для обробки STDOUT запущеного командного процесу, який є іменами підкаталогів без шляху і ніколи не укладається у подвійні лапки.

FOR з опцією /Fігнорує порожні рядки, які тут не зустрічаються, оскільки DIR з опцією /Bне виводить порожні рядки.

FOR також ігнорує рядки, починаючи з крапки з комою, яка є кінцевим символом рядка за замовчуванням. Ім'я каталогу може починатися з крапки з комою. З цієї причини eol=|використовується символ символу вертикальної смуги як символ кінця рядка, який жоден каталог чи файл не може мати у своєму імені.

FOR розділить рядок на підрядки, використовуючи пробіл та горизонтальну вкладку як роздільники, і призначить лише першому рядку з обмеженим пробілом / вкладками вказану змінну циклу I. Ця поведінка розбиття тут не потрібна, оскільки ім'я каталогу може містити одне або більше пробілів. Тому delims=використовується для визначення порожнього списку роздільників, щоб відключити поведінку розбиття рядків і присвоїти йому змінну циклу I, завжди повне ім'я каталогу.

Команда FOR виконує команду RD для кожного імені каталогу без шляху, що є причиною, чому в командному рядку RD слід ще раз вказати шлях до папки, який з'єднаний з назвою підпапки.

Щоб зрозуміти використовувані команди та їх роботу, відкрийте вікно командного рядка, виконайте там наступні команди та прочитайте повністю всі довідкові сторінки, що відображаються для кожної команди.

  • del /?
  • dir /?
  • echo /?
  • endlocal /?
  • for /?
  • goto /?
  • if /?
  • rd /?
  • rem /?
  • set /?
  • setlocal /?

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 .
Мофі

Повторно "Це працювало саме так, як мені було потрібно і як зазначено в ОП". : Ви перевірили на вимогу "може виникнути помилка на кшталт" цей файл / папка вже використовується "... коли це станеться, слід просто продовжити і пропустити цей файл / папку." ?
Пітер Мортенсен

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: "Ігноруйте налаштування лише для читання та видаліть все-таки (СИЛА)"
Peter Mortensen

-10

Використання:

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

Це видаляє всі файли та підпапки в них %pathtofolder%, включаючи файли лише для читання, і не вимагає підтвердження.


9
Отож, це залишає порожні підпапки в% pathtofolder%.
DH

35
Він НЕ видаляє папки в% pathtofolder%. Так погано, що я не маю репутації проголосувати цю помилкову відповідь
Віталій Корсаков

1
Як вказував Віталій Корсаков, це видаляє всі файли та файли з підкаталогів, але залишає підкаталоги на місці, яке ОП запитало, як видалити.
Fuzz Evans

6
Хоча ця команда залишає порожні папки, вона набагато ближче до того, що було запропоновано, ніж прийнятої відповіді. Звичайно, це залежить від обставин. У моєму випадку я б скоріше мав порожні папки, ніж файли, залишені в кореневому каталозі.
MarcusUA

але як ми можемо видалити папки та підпапки, які були відкриті в мережевій спільній доступності, коли інша клієнтська машина відкрила спільний диск, маючи доступ до запису до цієї папки. Команда psfile та чистих файлів закриє сеанс файлів, але знову через кілька секунд це створить автоматично черговий сеанс для цього користувача на сервері ...
user1954762,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.