我想删除一个名为“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"
将应用于文件和/或文件夹。