Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否删除windows批处理脚本中除一个文件夹以外的文件夹?_Windows_Batch File - Fatal编程技术网

是否删除windows批处理脚本中除一个文件夹以外的文件夹?

是否删除windows批处理脚本中除一个文件夹以外的文件夹?,windows,batch-file,Windows,Batch File,我有一个文件夹 C:\apache C:\apache112 C:\apache234 我有批处理脚本来删除驱动器C中的apache文件夹(带有通配符) forfiles /p C:\ /m *apache* /c "cmd /c if @isdir==TRUE rd /s /q @file" 如何删除驱动器C中除文件夹C:\apache之外的文件夹apache(带通配符)?一种方法是将模式更改为: apache?* 它应该匹配任何以apache开头并后跟至少一个字符的命令。除非绝对必要

我有一个文件夹

  • C:\apache
  • C:\apache112
  • C:\apache234
我有批处理脚本来删除驱动器C中的apache文件夹(带有通配符)

forfiles /p C:\ /m *apache* /c "cmd /c if @isdir==TRUE rd /s /q @file"

如何删除驱动器C中除文件夹C:\apache之外的文件夹apache(带通配符)?

一种方法是将模式更改为:

apache?*

它应该匹配任何以apache开头并后跟至少一个字符的命令。

除非绝对必要(例如,由于它的
/D
选项),避免使用
for files
,因为它速度慢,并且在通配符方面的行为与大多数其他命令不同。改用标准,如下所示:

rem//在所有匹配目录中循环:
对于(“*apache*”)中的/D%%I,请执行以下操作(
rem//利用排除条件:
如果/I不是“%%~nxI”==“apache”(
rem//实际删除目录(如果适用):
rd/S/Q“%%~I”
)
)

无需使用
for files
来完成此任务。这会产生大量的开销。您可以使用带有
/D
/R
选项的普通
FOR
命令。@Squashman,不需要
/R
,但对于其他命令,您完全正确…@aschipfl,您能给我一个完整的命令吗?
FOR/D%%I in(“C:\*apache*”)如果/I不是“%~nxI”==“apache”rd/S/Q“%~I”
?@aschipfl,工作起来很神奇,谢谢。通常
在结尾处与您一样匹配零一个字符,但是由于
forfiles
对待通配符的方式与几乎所有其他命令不同,我对此表示怀疑;很遗憾,我现在不能测试。。。