批处理文件。删除目录中的所有文件和文件夹


135

我想要一个批处理文件,该文件将删除我的无线工具包的缓存文件夹中的所有文件夹和文件。

目前,我有以下内容:

cd "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS"
del *.db

这将删除我的RMS目录中的所有.db文件,但是我想从此目录中删除所有单个内容。我怎样才能做到这一点?


3
键入del /?在提示符下。它将为您提供有关如何使用该工具的信息。对于这种情况,del *.* /s可以使用,但不要在错误的目录中使用!
迈克尔·托德

35
rmdir /s /q c:\users\tbrollo\j2mewtk\2.5.2\appdb\RMS
forsvarir 2011年

我建议每投票最多,以更改正确答案
GregM 2014年

5
forsvarir的答案也会删除该RMS目录,这可能不是预期的。(实际上,这通常是我想要的,因为那样我会丢失目录的原始时间戳及其所拥有的任何权限。)有关如何删除目录的所有内容但将目录本身保留在其中的信息,请参见我的答案。地点。
Bill_Stewart

Answers:


52

del *.*代替del *.db。这将删除所有内容。


56
注意:如果要绕过“您确定要删除...”提示,则需要添加/ FQ标志:del . /F /Q
Rhyuk 2013年

40
这只会删除文件-不会删除文件夹
icc97

52
不应将其标记为正确答案,因为它不会删除文件夹(如问题中所述)。
Bill_Stewart

158

用:

  • 创建一个批处理文件

  • 将以下文本复制到批处理文件中

    set folder="C:\test"
    cd /d %folder%
    for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q)
    

它将删除所有文件文件夹。


4
太棒了,我一直在寻找用于清理每月批处理作业的文件和文件夹的工具,这很成功。
Dave Harding

9
在执行此操作之前,请确保目录存在。
Bill_Stewart

2
如果文件名中包含“特殊”字符,请首先chcp 10000将编码更改为UTF-16
Demelziraptor 2014年

3
只想在Bill_Stewart的评论中添加注释。您要确保该目录存在的原因是,否则,它将清除您当前所在的目录。就我而言,这是我工作了30多分钟的批处理文件。:(好东西的文件夹的其余部分为源代码控制之下。
helios456

2
@vee更改循环以(rmdir "%%i" /s/q 2>NUL || del "%%i" /s/q >NUL ) 抑制错误并删除消息
Carl Walsh

34
IF EXIST "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS" (
    rmdir "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS" /s /q
)

这将从文件夹(和文件夹本身)中删除所有内容。


13
我认为问题是关于清空所有内容的目录,而不是删除目录本身。
Bill_Stewart

16

del *.*将仅删除文件,而不删除子目录。要核对目录的内容,可以使用以下脚本:

@echo off
setlocal enableextensions
if {%1}=={} goto :HELP
if {%1}=={/?} goto :HELP
goto :START

:HELP
echo Usage: %~n0 directory-name
echo.
echo Empties the contents of the specified directory,
echo WITHOUT CONFIRMATION. USE EXTREME CAUTION!
goto :DONE

:START
pushd %1 || goto :DONE
rd /q /s . 2> NUL
popd

:DONE
endlocal

pushd其中的变化进入目录,你要删除的孩子。然后,当rd要求删除当前目录和所有子目录时,子目录的删除成功,但是当前目录的删除失败-因为我们在其中。这会产生错误并2> NUL吞下。(2是错误流)。


6
我对这到底是如何工作有些困惑,因此向其他人做一个解释:推送到您想要删除子代的目录中。然后,当rd要求删除当前目录和所有子目录时,子目录的删除成功,但是当前目录的删除失败-因为我们在其中。这会产生2> NUL吞咽的错误。(2是错误流)。斯图尔特先生非常狡猾!
动能

哦,“ setlocal enableextensions”启用了将当前目录同时推送到堆栈并更改目录的功能。这似乎仅在XP之前是必需的,因为在此之前和之后它都默认为On。
动能

您能否将评论中的信息整合到答案中(评论可能随时消失)?(使用“编辑:” “更新:”标签。)
彼得·莫滕森

12

我只是从morty346发布的内容中得出以下结论:

set folder="C:\test"
IF EXIST "%folder%" (
    cd /d %folder%
    for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q)
)

它快速检查了变量中定义的文件夹是否首先存在,将目录更改为该文件夹,然后删除了其中的内容。


2
因此,快速提示-如果您尝试在网络路径上运行此命令,即使使用“ IF EXIST”语句,也将无法设置该文件夹,并且该语句将记录在cmd提示符下“ UNC路径不支持,默认为Windows目录”,那么它将尝试删除Windows目录中的所有内容。所以要小心
CBRF23 '17

11

您可以使用del/S标志执行此操作(告诉它从所有子目录中递归所有文件):

del /S C:\Path\to\directory\*

RD命令也可以使用。递归删除而无提示:

@RD /S /Q %VAR_PATH%

Rmdir(rd)



3

尝试以下方法;这个对我有用。

我有一个将数据转储到我的“ C:\ tmp”文件夹中的应用程序,以下内容对我而言最合适。甚至不要求“ 是”或“ 否”删除数据。我已经制定了每5分钟运行一次的时间表

cd "C:\tmp"

del *.* /Q

7
如果不存在文件夹“ C:\ tmp”(如果您或其他应用程序已删除该文件夹),并且尝试运行此文件夹,那么它是否会从“ C:\”内部的其他文件夹中删除数据?(发生在我身上)
Vikram

4
正如Vikram指出的那样:1)这非常危险,并且2)它不会按照问题中所述删除子目录。
Bill_Stewart

2
除了文件夹之外,您还可以做... del /q c:\tmp\*.*,这大约是安全一百万倍。更不用说cd只会改变路径,而不是驱动器。
Nyerguds '16

1
这是可怕的建议。正如其他人提到的那样,您最终可能会清除大量必要的数据。标记为删除,我认为这很糟糕。
RyanfaeScotland

2

更好的是,假设我要删除该C:\windows\temp文件夹下的所有内容。

@echo off
rd C:\windows\temp /s /q

11
这将删除目录c:\windows\temp。我不认为这是最初的问题。
Bill_Stewart 2014年

删除目录对我来说似乎最简单,如果以后需要重新创建,则可以。一个问题可能是特殊文件夹权限的丢失。但是,这似乎比其他大多数答案容易得多。
madannes,2015年

1
可悲的是,在Win10上,从批处理脚本中删除并立即重新创建似乎给了随机的“访问被拒绝”错误……
Nyerguds

2

您可以使用robocopy将空文件夹镜像到要清除的文件夹。

robocopy "C:\temp\empty" "C:\temp\target" /E /MIR

如果您无法删除或重新创建实际的文件夹,它也可以使用。

它确实需要一个现有的空目录。


1
根据robocopy的帮助,/MIR :: MIRror a directory tree (equivalent to /E plus /PURGE).-我相当确定这/E是多余的。
Nyerguds

2

set dir="Your Folder Path Here"
rmdir /s %dir%
mkdir %dir%

此版本删除时不询问:

set dir="Your Folder Here"
rmdir /s /q %dir%
mkdir %dir%

例:

set dir="C:\foo1\foo\foo\foo3"
rmdir /s /q %dir%
mkdir %dir%

这将清除C:\foo1\foo\foo\foo3

(我想提一下阿卜杜拉·萨布因的回答。我抄袭他时有些困惑。我没有注意到他的帖子。我要感谢您梅尔波梅内指出了错误!)


那根本不起作用。rmdir foo如果foo不是空目录,则会出错。
melpomene

@melpomene我发现了错误,应该将其修复!
TravieDude Minecraft和其他内容,2015年

1
我不是要以任何方式复制@Abdullah Sabouni。我一定没有注意到这一点。对不起。
TravieDude Minecraft及其他内容

@melpomene我陈述了我的错误以及对所发生事情的看法。但是我决定不删除它以防万一。感谢您指出了这一点。
TravieDude Minecraft和其他内容

@TravieDudeMinecraftandMore +1-也为我工作。
Guy Avraham

0

您不能使用任何一项rmdir或全部删除所有内容del

  • rmdir /s /q不接受通配符参数。所以rmdir /s /q *也会出错。
  • del /s /f /q 将删除所有文件,但是将保留空的子目录。

我首选的解决方案(正如我在许多其他批处理文件中所使用的)是:

rmdir /s /q . 2>NUL

0

只是GregM答案的修改版本:

set folder="C:\test"
cd /D %folder%
if NOT %errorlevel% == 0 (exit /b 1)
echo Entire content of %cd% will be deleted. Press Ctrl-C to abort
pause

REM First the directories /ad option of dir
for /F "delims=" %%i in ('dir /b /ad') do (echo rmdir "%%i" /s/q)

REM Now the files /a-d option of dir
for /F "delims=" %%i in ('dir /b /a-d') do (echo del "%%i" /q)

REM To deactivate simulation mode remove the word 'echo' before 'rmdir' and 'del'.

-1
@echo off
@color 0A

echo Deleting logs

rmdir /S/Q c:\log\

ping 1.1.1.1 -n 5 -w 1000 > nul

echo Adding log folder back

md c:\log\

您在正确的轨道上。只需添加代码即可添加再次删除的文件夹。


1
我不建议使用此解决方案,因为它会删除目录(从而丢失其权限)并重新创建目录(可能具有不同的权限)。
Bill_Stewart

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.