再次更新!
此代码用于查找所有包含 *.cpr 的子文件夹
如果发现 - 不执行任何操作
如果不是 - 删除子文件夹及其中的所有内容
代码似乎正在运行,但子文件夹未被删除。看起来只是正在扫描它们。最初,它识别不包含该文件的文件夹,然后提示我按 Y 删除没有该文件的文件夹。但是,删除并没有发生。我在最后一行向 del 函数添加了 /F 和 /Q 参数。
我究竟做错了什么?
另外,为了测试,我复制了该文件夹并将其命名为“cubasedefault”,但我的主文件夹名为“Projects - Cubase Default”
我该如何为该文件夹分配空格,以便 bat 文件理解这是文件夹位置而不是单独的命令?我试过引号,但没有用。我需要在空格中输入类似 % 的内容吗?
谢谢
谢谢 :)
echo off
setlocal enableDelayedExpansion
for /f %%i in ('dir /a:d /b /s f:\cubasedefault') do (
set _dir=%%i
if exist !_dir!\*.cpr (
rem do nothing
) else (
del /F /Q !_dir!
)
)
endlocal
答案1
FOR /f %%d in ('DIR /AD /B /O:N') DO if not exist %%d/*.cpr (rmdir /s /q "%%d")
这对我来说很管用。它只查看直接子文件夹,如果它们不包含文件扩展名“.cpr”,则删除它们
答案2
您需要使用rmdir
/rd
来删除目录
Del
仅删除指定目录的内容:
C:\Users\username>del pie
C:\Users\username\pie\*, Are you sure (Y/N)? y
请注意\*
最后的 ,它表示正在删除内容(并且只删除文件,而不是子目录)
而rmdir
/rd
删除实际目录(如果为空):
C:\Users\username>rmdir pie
C:\Users\username>dir pie
Volume in drive C is Win 10 System
Volume Serial Number is
Directory of C:\Users\username
File Not Found
删除文件夹及其所有子内容/s
但是您可以使用该选项小心使用此开关因为您可能需要确保*.cpr
在执行此操作之前已经扫描了所有子目录,或者您位于树的末尾而没有更多子目录需要扫描!
(rmdir
并且rd
完全相同的顺便说一下,可以互换使用)