是否删除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
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
对待通配符的方式与几乎所有其他命令不同,我对此表示怀疑;很遗憾,我现在不能测试。。。