- # Language: Powershell
- # Style: TypeScript
- # 文件名:
- # "文件(夹):删除空文件夹.ps1"
- function Remove-EmptyDirectories {
- param (
- [string]$Path
- )
- # 获取所有目录,把子目录排列在父目录前面。
- # 删除所有子文件(夹)后,可判断父目录为空,进而再删除父目录。
- $directories = Get-ChildItem $Path -Recurse -Directory | Sort-Object -Property FullName -Descending
- foreach ($dir in $directories) {
- # 检查目录是否为空(排除 desktop.ini)
- if (-not (Get-ChildItem $dir.FullName -Recurse) -and
- -not (Test-Path (Join-Path $dir.FullName "desktop.ini"))) {
- # 检查目录属性,排除具有系统、只读和重分析点属性的目录
- $attributes = (Get-Item $dir.FullName).Attributes
- if (-not ($attributes -band [System.IO.FileAttributes]::System) -and
- -not ($attributes -band [System.IO.FileAttributes]::ReadOnly) -and
- -not ($attributes -band [System.IO.FileAttributes]::ReparsePoint)) {
- Remove-Item $dir.FullName -Force -Verbose
- }
- }
- }
- }
- function main {
- if ($args.Count -gt 0) {
- Remove-EmptyDirectories $($args[0])
- } else {
- Write-Host "No arguments provided."
- }
- }
- main $args
- # Usage:
- # PowerShell.exe -File "文件(夹):删除空文件夹.ps1" "C:"
- <#
- # 无回溯,只删除了叶子空目录
- Get-ChildItem "C:" -Recurse | Where-Object { $_.PSIsContainer -and @(Get-ChildItem $_.FullName -Recurse).Count -eq 0 } | Remove-Item
- #>
复制代码- :: Language: cmd
- :: Style: Cobol
- :: 使用方法: "你命名的脚本.bat" "C:"
- :DelEmptyDir
- @ echo off&pushd "%TEMP%"&setlocal EnableDelayedExpansion
- @if not exist "%~1" exit /b 0
- REM 设置要清理的路径
- set "targetPath=%~1"
- REM 遍历所有目录
- for /f "delims=" %%D in ('dir "%targetPath%" /s/b/ad ^| sort /r') do (
- set "dirPath=%%D"
- REM 检查目录是否为空
- set isEmpty=1
- dir /a/b "!dirPath!" | findstr .* >nul && set isEmpty=0
- REM 检查是否包含 desktop.ini 文件
- if exist "!dirPath!\desktop.ini" set isEmpty=0
- REM 检查目录属性
- for %%A in ("!dirPath!") do (
- set "attr=%%~aA"
- echo !attr! | find "R" >nul && set isReadOnly=1 || set isReadOnly=0
- echo !attr! | find "S" >nul && set isSystem=1 || set isSystem=0
- echo !attr! | find "L" >nul && set isReparsePoint=1 || set isReparsePoint=0
- )
- REM 如果目录为空且不包含特定属性或文件,则删除
- if "!isEmpty!"=="1" if "!isReadOnly!"=="0" if "!isSystem!"=="0" if "!isReparsePoint!"=="0" (
- echo Deleting empty directory: "!dirPath!"
- rd "!dirPath!" >nul 2>&1
- )
- )
- @ endlocal & popd
- @exit /b 0
复制代码
不想麻烦,本想网上找一个简朴脚了事,没想太多照搬的,而且还错的离谱。只好本身搞个。
# 利用 Powershell 语言
function Remove-EmptyDirectories {
param (
[string]$Path
)
# 获取全部目录,把子目录排列在父目录前面。
# 删除全部子文件(夹)后,可判定父目录为空,进而再删除父目录。
$directories = Get-ChildItem $Path -Recurse -Directory | Sort-Object -Property FullName -Descending
foreach ($dir in $directories) {
# 查抄目录是否为空(扫除 desktop.ini)
if (-not (Get-ChildItem $dir.FullName -Recurse) -and
-not (Test-Path (Join-Path $dir.FullName "desktop.ini"))) {
# 查抄目录属性,扫除具有体系、只读和重分析点属性的目录
$attributes = (Get-Item $dir.FullName).Attributes
if (-not ($attributes -band [System.IO.FileAttributes]::System) -and
-not ($attributes -band [System.IO.FileAttributes]::ReadOnly) -and
-not ($attributes -band [System.IO.FileAttributes]::ReparsePoint)) {
Remove-Item $dir.FullName -Force -Verbose
}
}
}
}
function main {
if ($args.Count -gt 0) {
Remove-EmptyDirectories $($args[0])
} else {
Write-Host "No arguments provided."
}
}
main $args
# PowerShell.exe -File "文件(夹):删除空文件夹.ps1" "C:\"
<#
# 无回溯,只删除了叶子空目录
Get-ChildItem "C:\" -Recurse | Where-Object { $_.PSIsContainer -and @(Get-ChildItem $_.FullName -Recurse).Count -eq 0 } | Remove-Item
#>
:: ---------------------------------------------------------------------------------------------------------------------------
利用 CMD 命令:
elEmptyDir
@ echo off&pushd "%TEMP%"&setlocal EnableDelayedExpansion
@if not exist "%~1\" exit /b 0
REM 设置要清理的路径
set "targetPath=%~1"
REM 遍历全部目录
for /f "delims=" %%D in ('dir "%targetPath%" /s/b/ad ^| sort /r') do (
set "dirPath=%%D"
REM 查抄目录是否为空
set isEmpty=1
dir /a/b "!dirPath!" | findstr .* >nul && set isEmpty=0
REM 查抄是否包罗 desktop.ini 文件
if exist "!dirPath!\desktop.ini" set isEmpty=0
REM 查抄目录属性
for %%A in ("!dirPath!") do (
set "attr=%%~aA"
echo !attr! | find "R" >nul && set isReadOnly=1 || set isReadOnly=0
echo !attr! | find "S" >nul && set isSystem=1 || set isSystem=0
echo !attr! | find "L" >nul && set isReparsePoint=1 || set isReparsePoint=0
)
REM 如果目录为空且不包罗特定属性或文件,则删除
if "!isEmpty!"=="1" if "!isReadOnly!"=="0" if "!isSystem!"=="0" if "!isReparsePoint!"=="0" (
echo Deleting empty directory: "!dirPath!"
rd "!dirPath!" >nul 2>&1
)
)
@ endlocal & popd
@exit /b 0
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |