我想在特定路径(C:\ main_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_folder\folder_1
包含folder_2
,没有文件,并且
C:\main_folder\folder_1\folder_2
没有文件,该代码仅给出
C:\main_folder\folder_1\folder_2
,而我也想
C:\main_folder\folder_1
。
它不应该只查找没有文件的文件夹,因为我可以
C:\main_folder\folder_3
包含folder_4
,没有文件,但如果
C:\main_folder\folder_3\folder_4
包含文件,folder_3
和folder_4
不应列出。
在拥有列表之后,我要删除它们(该列表仅用于检查/保存它们)。
我该怎么写? 谢谢!
答案 0 :(得分:0)
如果您是受支持的Windows系统,它将安装PowerShell。这需要PowerShell 3.0+,但可以通过2.0进行一些修改。
这将收集子目录列表,并对降序的名称进行排序。这样可以删除具有空子目录的空目录。
当您满意要删除正确的目录时,请从-WhatIf
命令中删除Remove-Item
。
=== Remove-Empties.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"
答案 1 :(得分:0)
这对我有用:
@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