Я использую Windows.
Я хочу удалить все файлы и папки в папке с помощью системного вызова.
Я могу назвать так:
>rd /s /q c:\destination
>md c:\destination
Знаете ли вы более простой способ?
Я использую Windows.
Я хочу удалить все файлы и папки в папке с помощью системного вызова.
Я могу назвать так:
>rd /s /q c:\destination
>md c:\destination
Знаете ли вы более простой способ?
Нет, я не знаю этого.
Если вы хотите сохранить исходный каталог по какой-либо причине (ACL, & c.) и вместо этого действительно хотите его удалить, вы можете сделать следующее:
del /q destination\*
for /d %x in (destination\*) do @rd /s /q "%x"
Это сначала удаляет все файлы из каталога, а затем рекурсивно удаляет все вложенные каталоги, но в целом сохраняет каталог верхнего уровня как есть (кроме его содержимого).
Обратите внимание, что в пакетном файле вам нужно удвоить %
в цикле for
:
del /q destination\*
for /d %%x in (destination\*) do @rd /s /q "%%x"
del c:\destination\*.* /s /q
работал у меня. Надеюсь, это сработает и для вас.
Я думаю, что самый простой способ сделать это:
rmdir /s /q "C:\FolderToNotToDelete\"
Последний "\" в пути является важной частью.
Если имена вложенных папок могут содержать пробелы, вы должны окружать их в экранированных кавычках. Следующий пример показывает это для команд, используемых в пакетном файле.
set targetdir=c:\example
del /q %targetdir%\*
for /d %%x in (%targetdir%\*) do @rd /s /q ^"%%x^"
Да! Использовать Powershell:
powershell -Command "Remove-Item 'c:\destination\*' -Recurse -Force"
Один простой вариант с одной строкой - создать пустой каталог где-то в вашей файловой системе, а затем использовать ROBOCOPY
(http://technet.microsoft.com/en-us/library/cc733145.aspx) с помощью переключателя /MIR
для удаления всех файлов и подпапок. По умолчанию robocopy не копирует защиту, поэтому ACL в корневой папке должны оставаться неповрежденными.
Также, возможно, нужно установить значение для переключателя повтора, /r
, потому что число попыток по умолчанию равно 1 миллиону.
robocopy "C:\DoNotDelete_UsedByScripts\EmptyFolder" "c:\temp\MyDirectoryToEmpty" /MIR /r:3
Чтобы удалить файл:
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"
Вы можете создать script, чтобы удалить все, что вы хотите (папка или файл), как этот mydel.bat
:
@echo off
setlocal enableextensions
if "%~1"=="" (
echo Usage: %0 path
exit /b 1
)
:: check whether it is folder or file
set ISDIR=0
set ATTR=%~a1
set DIRATTR=%ATTR:~0,1%
if /i "%DIRATTR%"=="d" set ISDIR=1
:: Delete folder or file
if %ISDIR%==1 (rmdir /s /q "%~1") else (del "%~1")
exit /b %ERRORLEVEL%
Несколько примеров использования:
mydel.bat "path\to\folder with spaces"
mydel.bat path\to\file_or_folder
У меня была папка с индексом с 33 папками, в которой были удалены все файлы и подпапки. Я открыл командную строку в папке индекса, а затем использовал следующие команды:
for /d in (*) do rd /s /q "%a" & (
md "%a")
Я разделил их на две строки (нажмите Enter после первой строки, и когда вас попросят добавить вторую строку), потому что если она введена в одной строке, это может не сработать. Эта команда удалит все каталоги, а затем создаст новую пустую, удалив все файлы и подфлоры в исходном каталоге.
Перейдите в родительский каталог
Удалить подпапки