如何通过cmd调用删除文件夹中的所有文件和文件夹


Answers:


137

不,我不认识。

如果您出于某种原因(ACL,&c。)要保留原始目录,而实际上却想清空它,则可以执行以下操作:

del /q destination\*
for /d %x in (destination\*) do @rd /s /q "%x"

这首先从目录中删除所有文件,然后以递归方式删除所有嵌套目录,但总体上保持顶层目录不变(内容除外)。

请注意,在批处理文件中,您需要%for循环内的double值加倍:

del /q destination\*
for /d %%x in (destination\*) do @rd /s /q "%%x"

3
我没有批处理文件就能做到这一点。使用&&
合并

1
我是一个完整的Windows Shell菜鸟:如何通过此示例将目标设置为路径?
low_rents 2015年

您可以destination通过路径替换单词,必要时可以在整个单词周围使用引号。
乔伊

4
这个答案让我很难过,因为这是最好的答案
KCD

1
@stenci:第二行只能删除给定目录。实际上,它这样做是递归的,但是它不能删除文件。因此,要删除目录中的所有内容,必须删除所有文件和所有目录。请注意,这与删除单个目录及其中的所有内容无关。这是关于删除内部所有内容并保留父目录。
乔伊

39

del c:\destination\*.* /s /q为我工作。希望对您也一样。


13
删除所有文件,但不删除文件夹。
埃里克

2
对我有用的是导航到该文件夹​​。(右键单击,在此处选择打开cmd提示),然后del *.*
Daniel L. VanDenBosch

相对路径的示例del "../../server/front-end\*.*"
FindOutIslamNow

@ DanielL.VanDenBosch,不是很容易编写脚本。
Synetech

29

我认为最简单的方法是:

rmdir /s /q "C:\FolderToNotToDelete\"

路径中的最后一个“ \”是重要部分。


27
这也将删除文件夹本身。
Archie 2014年

完美,这就是我所需要的:)
gNerb

这会递归地起作用吗,它的路径太长了?
eomeroff '16

2
结合起来mkdir C:\FolderToNotToDelete对我来说已经足够了:)
qbolec '18

1
如果您的父文件夹(通过这种方式被删除)拥有一些重要的权限,而现在您需要重新创建这些权限,则可能会出现问题……
Mladen

15

是! 使用Powershell:

powershell -Command "Remove-Item 'c:\destination\*' -Recurse -Force"

太糟糕了,PowerShell是一个笨拙,肿,非常缓慢的野兽。:-|
Synetech

13

如果子文件夹名称可能包含空格,则需要将其用转义引号引起来。以下示例说明了批处理文件中使用的命令。

set targetdir=c:\example
del /q %targetdir%\*
for /d %%x in (%targetdir%\*) do @rd /s /q ^"%%x^"

6

删除文件:

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"

您可以创建一个脚本来删除所需的任何内容(文件夹或文件),如下所示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

1

一种简单的单行选项是在文件系统上的某个位置创建一个空目录,然后将ROBOCOPYhttp://technet.microsoft.com/en-us/library/cc733145.aspx)与/MIR开关一起使用以删除所有文件并子文件夹。默认情况下,robocopy不会复制安全性,因此根文件夹中的ACL应该保持不变。

还可能要为重试开关设置一个值/r,因为默认重试次数为1百万次。

robocopy "C:\DoNotDelete_UsedByScripts\EmptyFolder" "c:\temp\MyDirectoryToEmpty" /MIR /r:3

0

我有一个包含33个文件夹的索引文件夹,该文件夹需要删除其中的所有文件和子文件夹。我在索引文件夹中打开了一个命令行,然后使用了以下命令:

for /d in (*) do rd /s /q "%a" & (
md "%a")

我将它们分成两行(在第一行之后按回车键,当要求输入更多内容时添加第二行),因为如果在一行上输入,则可能无法正常工作。此命令将擦除每个目录,然后创建一个空的新目录,从而删除原始目录中的所有文件和子文件夹。



0

只需2个简单步骤。[/ q表示安静,/ f表示强制,/ s表示子目录]

  1. 清空目录以删除

    del *.* /f/s/q  
    
  2. 删除目录

    cd ..
    rmdir dir_name /q/s
    

看图片


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.