Cmd 列出(然后删除)没有文件的所有文件夹

Cmd 列出(然后删除)没有文件的所有文件夹,cmd,directory,subdirectory,Cmd,Directory,Subdirectory,我想查找特定路径(C:\main\u folder)下没有文件的所有文件夹 我用cmd找到了一种方法: @echo off setlocal set "folder=C:\main_folder" for /r "%folder%" /d %%F in (.) do dir /b "%%F" | findstr "^" >nul || (echo %%~fF) > "C:\empty_folders_list.txt" 但是如果我有 C:\main\u folder\folder

我想查找特定路径(C:\main\u folder)下没有文件的所有文件夹

我用cmd找到了一种方法:

@echo off
setlocal
set "folder=C:\main_folder"
for /r "%folder%" /d %%F in (.) do dir /b "%%F" | findstr "^" >nul || (echo %%~fF) > "C:\empty_folders_list.txt" 
但是如果我有
C:\main\u folder\folder\u 1
包含
文件夹\u 2
且没有文件和
C:\main\u folder\folder\u 1\folder\u 2
没有文件,代码只给出
C:\main\u folder\folder\u 1\folder\u 2
,而我也希望
C:\main\u folder\folder\u 1

它不应该只查看没有文件的文件夹,因为我可以
C:\main\u folder\folder\u 3
包含
folder\u 4
且无文件,但如果
C:\main\u folder\folder\u 3\folder\u 4
包含文件,不应列出
folder\u 3
folder\u 4

在拥有列表后,我想删除它们(列表仅用于检查/保存它们)

我该怎么写呢?
谢谢

如果您是受支持的Windows系统,它将具有PowerShell。这需要PowerShell 3.0+,但可以通过2.0进行一些修改

这将收集子目录列表并按降序排列名称。这样,具有空子目录的空目录将被删除

当您确信正确的目录将被删除时,请从
删除项
命令中删除
-WhatIf

==删除-清空。ps1

$baseDir = 'C:\main_folder'
$dirs = (Get-ChildItem -Directory -Recurse -Path $baseDir).FullName | Sort-Object -Descending
foreach ($dir in $dirs) {
    if (((Get-ChildItem -Directory -Path $dir).Length -eq 0) -and
        ((Get-ChildItem -File -Path $dir | Measure-Object).Count -eq 0)) {
        "Removing directory $($dir)"
        Remove-Item -Path $dir -WhatIf
    }
}
==从cmd.exe命令行或.bat文件脚本调用

powershell -NoLogo -NoProfile -File ".\Remove-Empties.ps1" >"C:\empty_folders_list.txt"
这对我很有用:

@echo off
setlocal

set "folder=C:\temp\bob"
for /r "%folder%" /d %%F in (.) do dir /b /s /a-d "%%F" 2>nul | findstr "^" >nul || echo %%~fF
输出:

C:\temp>test
C:\temp\bob\empty parent
C:\temp\bob\empty parent\empty subfolder
C:\temp\bob\not empty parent\empty subfolder

你应该试试
dir/b/s/a-d“%%F”
看看效果如何。谢谢。尝试了这个@echo off setlocal set“folder=C:\main\u folders”for/r“%folder%”/d%%F in(.)do dir/b/s/a-d“%%F”| findstr“^”>nul | |(echo%%~fF)>“C:\empty\u folders\u list.txt”,但它只写了C:\main\u folder\folder\u 1\folder\u 2…谢谢。这样我就得到了“删除目录C:\main\u folder\folder\u 1\folder\u 2如果:在目标“C:\main\u folder\folder\u 1\folder\u 2”上执行“删除目录”操作”,但这并不是说C:\main\u folder\u 1也是空的。。。在$baseDir中,我必须编写我的主路径?或者我应该在其中添加“/src/t”吗?我假设您将第一行更改为
$baseDir='C:\main\u folder'
。它没有删除
folder1
的原因是
folder2
没有实际删除,因为
-WhatIf
<代码>文件夹仍然包含
folder2
,因此不能将其删除。当您删除
-WhatIf
时,我希望它会显示正在删除
folder1
。确实,它工作得很好。我的问题是(echo%%~fF)>“C:\empty\u folders\u list.txt”来写入文件,因为里面只有最后一个文件夹。。。我怎样才能把它们都放进那个档案里?那么如何删除呢?谢谢使用
>
而不是
。追加而不是覆盖。