有没有一种简单的方法让窗口cmd
窗口匹配递归地匹配某个模式的所有文件,例如
rm **/*.tmp
看这个帖子了解它在 Unix 上的工作原理
(我不确定所有 Unix shell 对此是否反应良好,但至少 bash 和 zsh 是这样的)
答案1
我认为最接近的等价物是del /S {pattern}
C:\Users\RGB> dir /S/B t
C:\Users\RGB\t\f1.foo
C:\Users\RGB\t\f1.txt
C:\Users\RGB\t\f2.txt
C:\Users\RGB\t\t2
C:\Users\RGB\t\t2\f3.txt
C:\Users\RGB\t\t2\f4.foo
C:\Users\RGB> del /S t\*.foo
Deleted file - C:\Users\RGB\t\f1.foo
Deleted file - C:\Users\RGB\t\t2\f4.foo
C:\Users\RGB> dir /S/B t
C:\Users\RGB\t\f1.txt
C:\Users\RGB\t\f2.txt
C:\Users\RGB\t\t2
C:\Users\RGB\t\t2\f3.txt
答案2
您可以使用FOR /R
它来循环遍历文件/文件夹。详细了解您可以使用该命令做什么这里
例如,对于你的例子,它将是这样的:
For /R C:\ %G IN (*.tmp) do del "%G"
如果你想在批处理文件中使用它,%%G
而不是%G
答案3
答案是:不,没有办法做到这一点。
您的问题似乎是关于如何简单地使用 **,这可能在各种情况下都很有用。
类似 DOS 的命令提示符 (CMD.EXE) 根本不支持这一点。
要理解的关键一点是,命令行解释器(传统 DOS 中的 COMMAND.COM)实际上并不支持通配符,Windows NT、2K、XP 以及后续版本的 Microsoft Windows 中内置的 CMD 程序也不支持通配符。
DOS 的许多命令(如 XCOPY)都支持通配符,甚至包括内置于 DOS 命令行 shell 中的一些命令(如 DIR)。(根据版本的不同,可以使用外部 DELTREE 命令或内部命令(如 DEL 或 RMDIR)进行递归删除。)但是,每个单独的命令都提供了对理解通配符的支持。实际的命令行解释器只是将通配符传递给命令。因此,如果您有一些不支持通配符的命令(例如,DOS 中的 EDIT 或 Microsoft Windows 中的 NOTEPAD),那么命令 shell 将不会为您处理该问题。
相反,在 Unix 中,shell 程序会解释通配符。个别程序通常不支持通配符。我能想到的一个例外是“find”命令。为了允许“find”命令接收通配符,您可能需要对其进行转义。当希望将某些符号传递给支持“正则表达式”的程序时,转义字符也很有用。在 DOS 中通常不需要进行这种转义,因为在 DOS 中,命令行参数不会与您提供的符号混淆。(同样,Windows 继承了 DOS 的行为,这是早期 Windows 版本努力与 DOS 兼容的结果。)
注意:我并不反对pungk 的精彩回答,这为许多情况提供了一种实用的解决方法。如果您想以递归方式执行某些操作,这可能是一种选择。我只是说您可能需要执行类似的操作,而不仅仅是使用通配符,因为通配符不是命令行解析器可以解释的东西。
其他选项可能是使用程序中的选项,例如RedGrittyBrick 的回答,它指定如何在现代 Windows 版本中递归删除文件(这似乎适合您在 Unix 中递归删除文件的示例)。这通常是最简单的方法。但是,您执行此操作的能力将根据您使用的程序而有所不同。在 Unix 中,-R 可能是递归的最常见选项,而 -r 是第二常见的选项。在 DOS/Windows 中,/s 最常见。但是,也有例外。
当然,另一个选择可能是在 Windows 中使用 Unix shell。(对于 Windows 10 版本尤其如此,它具有安装 Linux 子系统功能的内置选项,提供了一个版本的 bash。)