คุณใช้คำสั่งอะไรเพื่อค้นหาไดเรกทอรีว่างใน Windows
บางโฟลเดอร์อาจมีบางโฟลเดอร์ที่ซ่อนอยู่เช่น.svn
หรือ.settings
แต่พวกเขาควรจะยังคงเป็นโฟลเดอร์ที่ว่างเปล่า
คุณใช้คำสั่งอะไรเพื่อค้นหาไดเรกทอรีว่างใน Windows
บางโฟลเดอร์อาจมีบางโฟลเดอร์ที่ซ่อนอยู่เช่น.svn
หรือ.settings
แต่พวกเขาควรจะยังคงเป็นโฟลเดอร์ที่ว่างเปล่า
คำตอบ:
วิธีที่ง่ายที่สุดที่ฉันสามารถคิดเป็นที่มีขนาดเล็กPowerShell สคริปต์ หากคุณใช้ Windows 7 คุณควรติดตั้งไว้แล้วหากไม่ได้เยี่ยมชม Microsoft.com เพื่อดาวน์โหลดและติดตั้ง ลิงค์นี้มีคำอธิบายโดยละเอียด แต่มีการดำเนินการอย่างรวดเร็วเพื่อความสะดวกของคุณ
เปิด PowerShell แล้วป้อนสิ่งนี้:
(gci C:\Scripts -r | ? {$_.PSIsContainer -eq $True}) | ? {$_.GetFiles().Count -eq 0} | select FullName
เปลี่ยน C: \ Scripts เป็นสิ่งที่คุณต้องการค้นหาคุณสามารถตั้งค่าเป็น C: \ ถ้าคุณต้องการตรวจสอบไดรฟ์ทั้งหมด
มันจะให้ผลลัพธ์เช่นนี้ (โปรดทราบว่านี่คือไดเรกทอรีว่างเปล่าด้านล่าง C: \ Scripts
ชื่อเต็ม ------- C: \ Scripts \ ว่างเปล่า C: \ Scripts \ Empty โฟลเดอร์ 2 C: \ Scripts \ Empty \ Empty โฟลเดอร์ย่อย C: \ Scripts \ New โฟลเดอร์ \ Empty โฟลเดอร์ย่อยสามระดับ
หากคุณมอง PowerShell สักหน่อยฉันแน่ใจว่าคุณจะสามารถหาวิธีลบโฟลเดอร์ที่ว่างโดยอัตโนมัติได้หากคุณต้องการ
แก้ไข : ตามที่ Richard กล่าวไว้ในความคิดเห็นสำหรับการใช้ไดเรกทอรีว่างเปล่าอย่างแท้จริง:
(gci C:\Scripts -r | ? {$_.PSIsContainer -eq $True}) | ?{$_.GetFileSystemInfos().Count -eq 0} | select FullName
?{$_.GetFileSystemInfos().Count -eq 0}
ที่จะมีอย่างสมบูรณ์โฟลเดอร์ว่างเปลี่ยนองค์ประกอบที่สามของท่อ
ต่อไปนี้เป็นวิธีที่ง่ายที่สุดที่ฉันสามารถทำได้โดยใช้โค้ดเพียงบรรทัดเดียว มันแสดงรายการไดเรกทอรีว่างเปล่าที่ตำแหน่งปัจจุบัน หากการเรียกซ้ำเป็นสิ่งจำเป็นพารามิเตอร์อาจจะเพิ่มการเรียกร้องให้-Recurse
Get-ChildItem
Get-ChildItem -Directory | Where-Object { $_.GetFileSystemInfos().Count -eq 0 }
เวอร์ชั่นย่อพร้อมชื่อแทน:
dir -Directory | ? {$_.GetFileSystemInfos().Count -eq 0 }
หรือเป็นฟังก์ชัน PowerShell แบบพารามิเตอร์ (ฉันเพิ่มสิ่งนี้ลงในโปรไฟล์เริ่มต้น PowerShell ของฉัน):
Function Get-EmptyDirectories($basedir) {
Get-ChildItem -Directory $basedir | Where-Object { $_.GetFileSystemInfos().Count -eq 0 }
}
สิ่งนี้สามารถเรียกใช้เป็นฟังก์ชัน PowerShell อื่น ๆ รวมถึงการวางท่อ ตัวอย่างเช่นการโทรนี้จะลบไดเรกทอรีว่างทั้งหมดในไดเรกทอรีระบบชั่วคราว:
Get-EmptyDirectories $env:TMP | del
ลองสิ่งนี้
Get-ChildItem C:\Scripts -Recurse -Directory | Where-Object {!$_.GetFileSystemInfos().Count}
การนับไม่ใช่ 0 มันไม่มีอยู่เลยหมายความว่าไดเรกทอรีว่างเปล่าทั้งหมดหรือมีโฟลเดอร์ว่างเปล่าอื่น ๆ ทั้งหมด
ขอบคุณฉันใช้สิ่งนี้เป็นพื้นฐานสำหรับสคริปต์ของฉัน ฉันต้องการลบโฟลเดอร์เปล่า แต่พยายามทำWhere-Object {$_.GetFiles().Count -eq 0}
จะลบโฟลเดอร์ที่มีไดเรกทอรีย่อยที่ไม่ว่างเปล่า ฉันลงเอยด้วยการใช้ลูป DO WHILE เพื่อลบโฟลเดอร์ที่ไม่มีไฟล์หรือโฟลเดอร์จากนั้นวนกลับและตรวจสอบอีกครั้งจนกว่าจะถึงจุดสิ้นสุดของทรี
$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)
#>