有没有办法批量删除只包含一个特定文件的文件夹?

Is there a way to delete a folder that contains only one specific file with batch?

需要一种删除文件夹 (rd/rmdir) 的方法(如果其中仅包含一个特定文件)。如果有任何其他文件或子文件夹,请忽略它。尝试使用尽可能少的代码来做到这一点。目前,我正在这样做...

If Exist "C:\Folder\SubFolder\filename.txt" Move /Y "C:\Folder\SubFolder\filename.txt" "%TEMP%"
If Not Exist "C:\Folder\SubFolder\*" RD "C:\Folder\SubFolder" /Q /S

但是,即使该文件夹不包含任何文件,该文件夹也不会被删除。

这可以在批处理文件中实现吗?提前致谢。

你可以使用find来计算目录中的文件数,然后findstr来确定错误级别,只需使用条件运算符&&

也不需要检查文件是否存在,当找不到文件时,您可以将stderr重定向到nul

@echo off
Move /Y "C:\Folder\SubFolder\filename.txt" "%TEMP%" 2>nul
(dir /b "C:\Folder\SubFolder\*" | find /C /V "^" | findstr /R "\<0\>") && rd /S /Q "C:\Folder\SubFolder"

编辑

正如您提到的,您现在只想移动目录中唯一的文件,当前代码中的一些修改可以解决这个问题:

@echo off
set "_dir=C:\Folder\SubFolder"
set "fname=filename.txt"

(dir /b "%_dir%\*" | find /C /V "^" | findstr /R "\<1\>" >nul) && if exist "%_dir%\%fname%" (
   move /Y "%_dir%\%fname%" "%temp%"
   rd /S /Q "%_dir%"
)

这一次,我们检查文件夹中是否只有1项(文件或目录),如果是,我们测试是否是filename.txt如果不是,则跳过代码块,如果是,移动文件并删除目录。

我为您创建了 _dirfname 变量,这样您就可以只更新这两个字段,而不用更新整个代码。