Batch file 如何删除名称中与特定模式匹配的文件?

Batch file 如何删除名称中与特定模式匹配的文件?,batch-file,filenames,Batch File,Filenames,我正在创建一个批处理文件,该文件删除%TEMP%目录中的所有Rar$DIa0.?文件夹 这可能吗?如何做到 那个???是三个随机数。这就是我遇到麻烦的地方——删除所有名称中包含Rar$DIa0.。for/d就是为这种类型的使用而设计的。类似的方法应该可以工作(如果您正在从命令行进行测试,请删除其中一个%): /d使它在目录名而不是文件名上工作 如果您想让自己更轻松,请先更改为%TEMP%文件夹: pushdir cd /d %TEMP% for /d %%i in ("Rar$DIa0.???"

我正在创建一个批处理文件,该文件删除
%TEMP%
目录中的所有
Rar$DIa0.?
文件夹

这可能吗?如何做到


那个???是三个随机数。这就是我遇到麻烦的地方——删除所有名称中包含
Rar$DIa0.

for/d
就是为这种类型的使用而设计的。类似的方法应该可以工作(如果您正在从命令行进行测试,请删除其中一个
%
):

/d使它在目录名而不是文件名上工作

如果您想让自己更轻松,请先更改为%TEMP%文件夹:

pushdir
cd /d %TEMP%
for /d %%i in ("Rar$DIa0.???") do rd "%%i"
使其仅作用于
后有三个字母的文件夹。如果您的文件夹没有三个字母的扩展名,请将
更改为
*
。如果您有输入错误,并且foldername中没有实际的
,只需将其删除并使用
Rar$DIa0???
Rar$DIa0*

您可能希望首先通过将
rd
更改为
echo
来测试它,以确保在实际删除文件夹之前获得所需的文件夹


有关
For
(双关语)的详细信息,请在命令提示符下键入
For/?

在批处理文件中用于此任务的命令行是:

@for /D %%I in ("%TEMP%\Rar$DIa0.*") do @rd /Q /S "%%I"
命令FOR带有选项
/D
在环境变量
TEMP
定义的文件夹中搜索文件夹名称以
Rar$DIa0开头的子文件夹。
未设置隐藏或系统属性

循环变量
I
为与此文件夹模式匹配的每个找到的子文件夹保留找到的文件夹的名称,该文件夹的完整路径不带双引号,尽管临时文件夹的路径通常包含1个或多个空格

出于这个原因,必须引用循环变量
I
的当前值调用命令RD,其中参数
/Q
用于安静执行,参数
/S
用于删除指定文件夹中的所有子文件夹

要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面

  • 获取/?
  • rd/?

顺便说一句:WinRAR通常会自动删除临时文件夹,除了从存档中打开一个文件以便在另一个应用程序中查看/修改它,并且WinRAR在另一个应用程序退出打开的文件之前关闭。在这种情况下,WinRAR无法删除带有临时提取文件的临时文件夹,因为该文件仍在其他应用程序中打开。当然,如果此文件夹仍然是另一个应用程序的当前目录,或者此文件夹中的文件仍然由另一个具有读/写访问锁的应用程序打开,则commandRD也无法删除临时文件夹。

“for/d%%i in(Rar$DIa0*)do RD%%i”不起作用。它不会删除文件夹。(Rar$DIa0)此时意外。它确实有效。在发布之前,我先在这里测试了它。您的第二条注释缺少通配符(或*)。
rd
不起作用的唯一原因是目录不是空的,在这种情况下,您需要使用
rd/s%%i
。或者如果你做了我发布的以外的事情。学习使用Windows命令内置的帮助系统,使用命令名后跟
/?
,如我在回答中所示。或者您的目录名中有空格,在这种情况下,您需要用双引号将其括起来,如(“Rar$DIa0*”)。对于/d%%I in(Rar$DIa0*)执行rd/f%%i-这不会删除%TEMP%中的文件夹。这是临时工的问题吗?谢谢你的回答,它确实有效!我在批处理文件中实现了这一点。我有一个新问题:从C:\$RECYCLE.BIN删除这些文件夹。有没有办法在不手动删除它们的情况下执行此操作?我不想删除所有文件,我想保留除这些文件夹之外的所有内容。我已经尝试过del/s/q“C:\$RECYCLE.BIN\Rar$Dla0.*”但没有成功。del命令用于删除文件。命令RD(删除目录)用于删除文件夹。通过在命令提示窗口中运行
del/?
rd/?
在帮助输出的第一行中清楚地说明了这一点。在同一批处理文件中,复制发布的命令行,并将第二个命令行中的
%TEMP%
替换为
C:\$RECYCLE.BIN
,以删除回收站文件夹中与模式
Rar$Dla0.
匹配的所有文件夹。或者使用单个命令行:
@for/D%%I in(“%TEMP%\Rar$DIa0.*”C:\$RECYCLE.BIN\Rar$DIa0.*)执行@rd/Q/S“%%I”
@for /D %%I in ("%TEMP%\Rar$DIa0.*") do @rd /Q /S "%%I"