如果特定文件夹为空,是否从 Windows 中的批处理文件中删除它?

如果特定文件夹为空,是否从 Windows 中的批处理文件中删除它?

我想删除一个名为“NEW”的文件夹,但前提是该文件夹是空的。

以下是我尝试过的:

if exist "NEW\*" goto finished
if not exist "NEW\*" goto remove_new

:remove_new
rd /s /q "NEW\"
goto finished

:finished
exit

上述内容似乎考虑到了新文件夹的存在,所以不会删除它?

答案1

默认情况下,rd 只会删除非空文件夹。如果文件夹有子文件夹,也可以视为非空文件夹。

通过暗示/s,您说:删除文件夹内的所有文件和文件夹,然后删除此文件夹。

如果你只是这样做:

rd /q new

它将尝试删除文件夹 new。如果找到文件和/或文件夹,它将显示消息The folder is not empty.

/q 不会删除该消息。为了默默地尝试删除文件夹但不显示错误,请使用以下命令:

rd /q new 2>nul

此命令表示:尝试默默删除该文件夹。屏幕上显示的任何错误都应通过管道传输出去(即不显示)。

答案2

您的命令rd /q new或者rd new非常适合删除空的文件夹仅有的

对于包含文件和/或子文件夹的文件夹,此命令不起作用

观察:1要删除包含子文件夹/递归的文件夹,请添加/s


1.文件夹存在并且是空的

rd /q new   ⁄⁄ it work

rem :: or... 
rd new     ⁄⁄ it work

2.文件夹包含文件或子文件夹(空的或不):

rd /q new   ⁄⁄ does not work

rem :: or... 
rd new      ⁄⁄ does not work

3.文件夹包含文件或子文件夹(空的或不):

rd /q /s new   ⁄⁄ it work

rem :: or... 
rd /s new     ⁄⁄ it work

4.您不需要使用:label处理重定向操作时if exist返回真假,您可以在一行或一个块中执行这些操作,并且还可以显示更准确的消息:

  • 一条线:
2>nul rmdir /q /s new\. && echo\Folder Removed || if exist "New\." (Echo\Folder not Removed)else Echo\Folder not exist
  • 在一个块中:
@echo off 

2>nul rd /q /s new\. && ( 
     echo\Folder Removed 
)||( 
     if exist "New\." (
          echo\Folder not Removed
        ) else echo\Folder new not Exist 
    )

  • 所有可能成果/案例
Folder Exist and was Removed: echo\Folder Removed

Folder Exist and was not Removed: echo\Folder not Removed 

Folder not Exist and was Not Removed: echo\Folder not Exist 

观察:2使用“文件夹”测试文件夹是否存在,并避免将其与同名(没有扩展名)的文件混淆。


2>nul ⇆ omit error/redirect
  rmdir /q new ⇆  remove folder command
    && ⇆ operator take action for retun 0 == do  echo\Folder Removed
      || ⇆ operator take action for retun 0 retun non 0 == do ( ... 
        if True Exist new ⇆ (
             Folder Exists and has not been Removed⇆ if condition True 
            ) else/False Folder does not exist and because of that it was not removed ⇆ if condition False             

对于您的具体情况,您可以使用:

  • 一行代码:
2>nul rd /q new\. && echo\Folder New Empty Removed || if exist "New\." (echo\Folder not Empty and Not Removed) else echo\Folder not Exist

  • 在一个块中:
@echo off 

2>nul rd /q new\. && ( 
     echo\Folder New Empty Removed 
)||( 
     if exist "New\." (
          echo\Folder not Empty and Not Removed
        ) else echo\Folder not Exist 
    )
  • 所有可能成果/案例
Folder New Empty Exist and was Removed: echo\Folder Empty Removed

Folder New Exist and is not Empty and was Not Removed: echo\Folder not Empty and Not Removed 

Folder New not Exist and was Not Removed: echo\Folder not Exist 

删除文件夹,且仅当文件夹为空且没有空子文件夹时

@echo off 

2>nul dir /b "new\."|findstr . >nul && (
     echo\Folder New non Empty and not was Removed
)||( 
     2>nul rd /q "new\." && (
         echo\Folder new Empty Removed 
    )||(
         echo\Folder new Not Exist
       )
    )

答案3

如果您只删除空文件夹,而不是整个脚本,则可以直接使用rd而不使用/s开关(和q)。因此,您的命令将是:

rd "NEW\"

仅当目录存在且为空时,此操作才会删除该目录。否则将返回错误消息。

PS. 文件夹名称不区分大小写即可rd "new\"

PPS. 尽管在这种情况下您不需要它,但是""如果您使用带有空格的文件夹(如),则是一个好主意"new 01"

\PPPS。您也不需要文件夹名称末尾的反斜杠 ( ),因为rd仅适用于文件夹。但它有助于区分文件和文件夹与其他命令。例如exist "foldername\"将应用于文件夹exist "name"将应用于文件和/或文件夹。

相关内容