我想要一个批处理文件,可以删除我的无线工具包缓存文件夹中的所有文件和文件夹。
目前我有以下代码:
cd "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS"
del *.db
这将删除我RMS目录中所有的.db文件,但是我想要删除该目录中的每一件事。我该怎么做?
我想要一个批处理文件,可以删除我的无线工具包缓存文件夹中的所有文件和文件夹。
目前我有以下代码:
cd "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS"
del *.db
这将删除我RMS目录中所有的.db文件,但是我想要删除该目录中的每一件事。我该怎么做?
用法:
创建一个批处理文件
将以下文本复制到批处理文件中
set folder="C:\test"
cd /d %folder%
for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q)
这将删除所有文件和文件夹。
chcp 10000
以将编码更改为UTF-16。 - Demelziraptor(rmdir "%%i" /s/q 2>NUL || del "%%i" /s/q >NUL )
,以抑制错误和删除消息。 - Carl Walshdel *.*
而不是 del *.db
。这将删除所有文件。
del . /F /Q
。 - RhyukIF EXIST "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS" (
rmdir "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS" /s /q
)
这将从文件夹中删除所有内容(包括文件夹本身)。
del *.*
只会删除文件,而不会删除子目录。如果想要彻底清空目录中的内容,可以使用以下脚本:
rmdir /s /q foldername
其中foldername
为需要删除的目录名字。
@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 是错误流)。
foo.bat jack&jill
的形式执行脚本,此代码将失败。使用IF
命令的最佳实践:if "%~1"=="" goto :HELP
。使用文件和文件夹路径的最佳实践:PUSHD "%~1"
。 - Squashmanfoo.bat jack
,然后是 jill
(因为您没有引用路径)。要将其作为路径传递,您仍然需要引用它(因此不需要 "%~1"
)。因此,无需更改代码。 - Bill_StewartIF
比较。这些都不是边缘或模糊的情况。编写批处理文件的最佳实践是始终在字符串比较和文件/文件夹路径中使用引号。 - Squashman我只是从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)
)
它首先添加了一个快速检查,以确保变量定义的文件夹存在,然后切换到该文件夹并删除其中的内容。
del
和/S
标志(告诉它递归所有子目录中的所有文件)来完成此操作:del /S C:\Path\to\directory\*
RD 命令也可以被使用。静默地递归删除而无需提示:
@RD /S /Q %VAR_PATH%
set "DIR_TO_DELETE=your_path_to_the_folder"
IF EXIST %DIR_TO_DELETE% (
FOR /D %%p IN ("%DIR_TO_DELETE%\*.*") DO rmdir "%%p" /S /Q
del %DIR_TO_DELETE%\*.* /F /Q
)
使用
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
。
(我想提一下Abdullah Sabouin的回答。之前有混淆我抄袭他的帖子。我没有注意到他的回答。感谢 melpomene 指出错误!)
foo
不是一个空目录,则 rmdir foo
将报错。 - melpomene你可以尝试以下方法,这对我很有效。
我有一个应用程序会将数据导出至我的"C:\tmp"文件夹,以下方法对我而言是最好的。它甚至不会询问是否删除数据,我已经制定了每5分钟运行一次的计划
cd "C:\tmp"
del *.* /Q
del /q c:\tmp\*.*
,这样更加安全,而且注意 cd
只会改变路径,不会改变驱动器。 - NyergudsC:\windows\temp
文件夹下的所有内容。@echo off
rd C:\windows\temp /s /q
c:\windows\temp
,我认为这不是原来问题所要求的。 - Bill_Stewart
del /?
。它会告诉你如何使用这个工具。对于这个情况,del *.* /s
可以起作用,但别在错误的目录下执行! - Michael Toddc:\users\tbrollo\j2mewtk\2.5.2\appdb\RMS
,包括所有子目录和文件。命令为rmdir /s /q c:\users\tbrollo\j2mewtk\2.5.2\appdb\RMS
。 - forsvarirRMS
目录,这可能不是原本想要的结果。(实际上,我经常不希望这样做,因为这样会损失目录的原始时间戳和权限)。请看我的回答,了解如何删除目录中的所有内容但保留目录本身。 - Bill_Stewart