有没有办法批量删除只包含一个特定文件的文件夹?
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
如果不是,则跳过代码块,如果是,移动文件并删除目录。
我为您创建了 _dir
和 fname
变量,这样您就可以只更新这两个字段,而不用更新整个代码。
需要一种删除文件夹 (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
如果不是,则跳过代码块,如果是,移动文件并删除目录。
我为您创建了 _dir
和 fname
变量,这样您就可以只更新这两个字段,而不用更新整个代码。