如果文件夹不包含文件扩展名,则删除子文件夹

如果文件夹不包含文件扩展名,则删除子文件夹

再次更新!

此代码用于查找所有包含 *.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完全相同的顺便说一下,可以互换使用)

相关内容