Câu trả lời:
Cách dễ nhất tôi có thể nghĩ là với một tập lệnh PowerShell nhỏ . Nếu bạn đang chạy Windows 7, bạn nên cài đặt nó, nếu không truy cập Microsoft.com để tải xuống và cài đặt nó. Liên kết cung cấp một mô tả chi tiết nhưng ý chính của hoạt động được bao gồm ở đây để thuận tiện cho bạn.
Mở PowerShell và nhập này:
(gci C:\Scripts -r | ? {$_.PSIsContainer -eq $True}) | ? {$_.GetFiles().Count -eq 0} | select FullName
Thay đổi C: \ Script thành bất cứ thứ gì bạn muốn tìm kiếm, thậm chí bạn có thể đặt nó thành C: \ nếu bạn muốn nó kiểm tra toàn bộ ổ đĩa.
Nó sẽ cung cấp cho bạn đầu ra như thế này (lưu ý đây là các thư mục trống bên dưới C: \ Sc scripts.
Họ và tên ------- C: \ ScScript \ Empty C: \ Sc scripts \ Thư mục trống 2 C: \ Sc scripts \ Empty \ Empty Subfolder C: \ Sc scripts \ Thư mục mới \ Thư mục con rỗng ba cấp độ sâu
Nếu bạn xem xét PowerShell một chút, tôi chắc chắn bạn sẽ có thể tìm ra cách tự động xóa các thư mục trống nếu bạn muốn (mặc dù tôi khuyên bạn nên chống lại nó, chỉ trong trường hợp.)
Chỉnh sửa : Như Richard đã đề cập trong các bình luận, để sử dụng thư mục thực sự trống:
(gci C:\Scripts -r | ? {$_.PSIsContainer -eq $True}) | ?{$_.GetFileSystemInfos().Count -eq 0} | select FullName
?{$_.GetFileSystemInfos().Count -eq 0}
.
Sau đây là cách dễ nhất tôi có thể tìm thấy để đạt được điều này với một dòng mã. Nó liệt kê các thư mục trống tại vị trí hiện tại. Nếu đệ quy là cần thiết, tham số -Recurse
có thể được thêm vào cuộc gọi đến Get-ChildItem
.
Get-ChildItem -Directory | Where-Object { $_.GetFileSystemInfos().Count -eq 0 }
Phiên bản ngắn với bí danh:
dir -Directory | ? {$_.GetFileSystemInfos().Count -eq 0 }
Hoặc, như một chức năng PowerShell được tham số hóa (tôi đã thêm phần này vào hồ sơ khởi động PowerShell của mình):
Function Get-EmptyDirectories($basedir) {
Get-ChildItem -Directory $basedir | Where-Object { $_.GetFileSystemInfos().Count -eq 0 }
}
Điều này sau đó có thể được gọi như bất kỳ chức năng PowerShell nào khác, bao gồm cả đường ống. Ví dụ: cuộc gọi này sẽ xóa tất cả các thư mục trống trong thư mục temp hệ thống:
Get-EmptyDirectories $env:TMP | del
Thử cái này
Get-ChildItem C:\Scripts -Recurse -Directory | Where-Object {!$_.GetFileSystemInfos().Count}
Số lượng không phải là 0, nó hoàn toàn không tồn tại có nghĩa là thư mục hoàn toàn trống hoặc chứa các thư mục hoàn toàn trống khác
Cảm ơn, tôi đã sử dụng điều này như là một cơ sở cho kịch bản của tôi. Tôi muốn xóa các thư mục trống nhưng cố gắng làm Where-Object {$_.GetFiles().Count -eq 0}
sẽ xóa các thư mục có thư mục con không trống. Tôi đã kết thúc bằng cách sử dụng vòng lặp DO WHILE để xóa thư mục không có tệp hoặc thư mục sau đó lặp lại và kiểm tra lại cho đến khi đến cuối cây.
$Datefn=Get-Date -format M.d.yyyy_HH.mm.ss
#Set The File Name for the log file
$DelFileName = $Datefn
#Set The File Ext for the log file
$DelFileExt = " - Old Files" + ".log"
#Set The File Name With Ext for the log file
$DelFileName = $DelFileName + $DelFileExt
#Set Log Path
$LogPath = [Environment]::GetFolderPath("Desktop")
$Path = 'Q:\'
$NumDays = 365
Get-ChildItem -Path $Path -Exclude DCID.txt,*.exe -Recurse | Where-Object {$_.lastwritetime -lt`
(Get-Date).addDays(-$NumDays) -and $_.psiscontainer -eq $false} |
ForEach-Object {
$properties = @{`
Path = $_.Directory`
Name = $_.Name
DateModified = $_.LastWriteTime
Size = $_.Length / 1GB }
New-Object PSObject -Property $properties | select Path,Name,DateModified, Size
} |
Out-File "$LogPath\$DelFileName"
<#
#Removes the files found
Get-ChildItem -Path $Path -Exclude DCID.txt,*.exe -Recurse | Where-Object {$_.lastwritetime -lt`
(Get-Date).addDays(-365) -and $_.psiscontainer -eq $false} | Remove-Item -Recurse -Force
#Removes empty folders
DO {
$a = (Get-ChildItem $Path -Recurse | Where-Object {$_.PSIsContainer -eq $true}) | Where-Object`
{$_.GetFileSystemInfos().Count -eq 0} | Select-Object Fullname
$a
(Get-ChildItem $Path -Recurse | Where-Object {$_.PSIsContainer -eq $true}) | Where-Object`
{$_.GetFileSystemInfos().Count -eq 0} | Remove-Item -Force
}
WHILE ($a -ne $null)
#>