【发布时间】:2017-01-03 16:05:45
【问题描述】:
我正在创建一个批处理文件,用于删除%TEMP% 目录中的所有Rar$DIa0.??? 文件夹。
这可能吗,怎么做?
???是三个随机数。这就是我遇到问题的地方 - 删除名称中包含 Rar$DIa0. 的所有文件夹。
【问题讨论】:
标签: batch-file filenames
我正在创建一个批处理文件,用于删除%TEMP% 目录中的所有Rar$DIa0.??? 文件夹。
这可能吗,怎么做?
???是三个随机数。这就是我遇到问题的地方 - 删除名称中包含 Rar$DIa0. 的所有文件夹。
【问题讨论】:
标签: batch-file filenames
for /d 专为此类用途而设计。像这样的东西应该可以工作(如果您从命令行测试,请删除 % 之一):
for /d %%i in ("%TEMP%\Rar$DIa0.???") do rd "%TEMP%\%%i"
/d 使它作用于目录名而不是文件名。
如果您想让自己更轻松,请先切换到 %TEMP% 文件夹:
pushdir
cd /d %TEMP%
for /d %%i in ("Rar$DIa0.???") do rd "%%i"
??? 使它只作用于在. 之后有三个字母的文件夹。如果您的文件夹不是只有三个字母的扩展名,请将.??? 更改为.*。如果您有错字,并且文件夹名称中没有实际的.,只需将其删除并使用Rar$DIa0??? 或Rar$DIa0*
您可能需要先将rd 更改为echo 来测试它,以确保在实际删除它们之前获得所需的文件夹。
有关for(双关语)的更多信息,请在命令提示符下键入for /?。
【讨论】:
rd 不起作用的唯一原因是目录不为空,在这种情况下您需要使用rd /s %%i。或者,如果您做了我发布的内容以外的其他事情。学习使用 Windows 命令内置的帮助系统,通过使用命令名称后跟 /? 访问,正如我在回答中向您展示的那样。
此任务在批处理文件中使用的命令行是:
@for /D %%I in ("%TEMP%\Rar$DIa0.*") do @rd /Q /S "%%I"
带有选项/D 的命令FOR 在由环境变量TEMP 定义的文件夹中搜索文件夹名称以Rar$DIa0. 开头且未设置隐藏或系统属性的子文件夹。
循环变量I 为每个找到的与此文件夹模式匹配的子文件夹保存找到的文件夹的名称,其中包含不带双引号的完整路径,尽管临时文件夹的路径通常包含 1 个或多个空格。
因此,只有带有参数/Q 用于安静执行和/S 用于删除指定文件夹中的所有子文件夹的命令 RD 必须在引用循环变量的当前值的情况下调用I 用双引号括起来。
要了解所使用的命令及其工作原理,请打开命令提示符窗口,在其中执行以下命令,并仔细阅读每个命令显示的所有帮助页面。
for /?rd /?顺便说一句:WinRAR 通常会自动删除临时文件夹,除非从存档中打开一个文件以便在另一个应用程序中查看/修改它并且 WinRAR 已关闭在使用打开的文件退出其他应用程序之前。在这种情况下,WinRAR 无法删除带有临时提取文件的临时文件夹,因为该文件仍在另一个应用程序中打开。当然,如果临时文件夹仍然是另一个应用程序的当前目录,或者这个文件夹中的文件仍然被另一个具有读/写访问锁定的应用程序打开,命令 RD 也不能删除临时文件夹。
【讨论】:
del /? 和 rd /? 在第一行帮助输出中明确说明了这一点。在同一个批处理文件中复制已发布的命令行并在第二个命令行%TEMP% 中替换为C:\$RECYCLE.BIN 以删除回收站文件夹中与模式Rar$Dla0.* 匹配的所有文件夹。或者使用单个命令行:@for /D %%I in ("%TEMP%\Rar$DIa0.*" "C:\$RECYCLE.BIN\Rar$DIa0.*") do @rd /Q /S "%%I"