編寫ps1,輸入主目錄,刪除子目錄和下面的文件,并且統(tǒng)計 刪除的文件占用的大小,復雜的功能需要注釋,函數(shù)要模塊化
下面是一個模塊化的 PowerShell 腳本,實現(xiàn)了你描述的功能:
# 函數(shù):計算文件夾大小
function Get-FolderSize {
param (
[Parameter(Mandatory=$true)]
[string]$Path
)
try {
$size = (Get-ChildItem -Path $Path -Recurse -File | Measure-Object -Property Length -Sum).Sum
return $size
}
catch {
Write-Warning "計算文件夾大小出錯: $_"
return 0
}
}
# 函數(shù):格式化文件大小輸出
function Format-FileSize {
param (
[Parameter(Mandatory=$true)]
[double]$SizeInBytes
)
if ($SizeInBytes -ge 1GB) {
return "{0:N2} GB" -f ($SizeInBytes / 1GB)
}
elseif ($SizeInBytes -ge 1MB) {
return "{0:N2} MB" -f ($SizeInBytes / 1MB)
}
elseif ($SizeInBytes -ge 1KB) {
return "{0:N2} KB" -f ($SizeInBytes / 1KB)
}
else {
return "$SizeInBytes Bytes"
}
}
# 主函數(shù):刪除子目錄并統(tǒng)計大小
function Remove-SubDirectories {
param (
[Parameter(Mandatory=$true)]
[string]$MainFolder
)
# 檢查主目錄是否存在
if (-not (Test-Path $MainFolder)) {
Write-Error "錯誤:指定路徑不存在"
return
}
# 初始化總大小計數(shù)器
$totalSize = 0
# 獲取所有子目錄
$subFolders = Get-ChildItem -Path $MainFolder -Directory
if ($subFolders.Count -eq 0) {
Write-Host "沒有找到子目錄"
return
}
# 遍歷并處理每個子目錄
foreach ($folder in $subFolders) {
$folderPath = $folder.FullName
Write-Host "正在處理: $folderPath"
# 計算當前子目錄大小
$folderSize = Get-FolderSize -Path $folderPath
$totalSize += $folderSize
try {
# 刪除子目錄及其內(nèi)容
Remove-Item -Path $folderPath -Recurse -Force -ErrorAction Stop
Write-Host "已刪除: $folderPath (大小: $(Format-FileSize -SizeInBytes $folderSize))"
}
catch {
Write-Warning "刪除失敗: $folderPath - 錯誤: $_"
}
}
# 輸出統(tǒng)計信息
Write-Host "`n處理完成!"
Write-Host "總共刪除: $($subFolders.Count) 個子目錄"
Write-Host "總占用空間: $(Format-FileSize -SizeInBytes $totalSize)"
}
# 主程序
try {
# 獲取用戶輸入的主目錄
$mainFolder = Read-Host "請輸入主目錄路徑"
# 確認操作(防止誤刪)
$confirmation = Read-Host "將刪除 $mainFolder 下的所有子目錄,確認嗎?(Y/N)"
if ($confirmation -eq 'Y' -or $confirmation -eq 'y') {
# 執(zhí)行刪除操作
Remove-SubDirectories -MainFolder $mainFolder
}
else {
Write-Host "操作已取消"
}
}
catch {
Write-Error "程序執(zhí)行出錯: $_"
}
finally {
Write-Host "程序結(jié)束"
}
功能說明:
-
模塊化設(shè)計:
-
Get-FolderSize:計算指定文件夾的總大小 -
Format-FileSize:將字節(jié)大小轉(zhuǎn)換為易讀的格式(GB/MB/KB/Bytes) -
Remove-SubDirectories:主邏輯函數(shù),處理刪除和統(tǒng)計
-
-
主要功能:
- 輸入主目錄路徑
- 刪除所有子目錄及其內(nèi)容
- 統(tǒng)計并顯示每個子目錄的大小以及總大小
- 添加操作確認,避免誤刪
-
錯誤處理:
- 檢查路徑是否存在
- 處理刪除失敗的情況
- 處理大小計算錯誤
使用方法:
- 將代碼保存為 .ps1 文件(例如
remove_subdirs.ps1) - 在 PowerShell 中運行
- 輸入主目錄路徑
- 確認刪除操作
示例輸出:
請輸入主目錄路徑: C:\Test
將刪除 C:\Test 下的所有子目錄,確認嗎?(Y/N): Y
正在處理: C:\Test\Folder1
已刪除: C:\Test\Folder1 (大小: 15.25 MB)
正在處理: C:\Test\Folder2
已刪除: C:\Test\Folder2 (大小: 2.50 GB)
處理完成!
總共刪除: 2 個子目錄
總占用空間: 2.51 GB
程序結(jié)束
注意事項:
- 腳本會刪除主目錄下的所有子目錄及其內(nèi)容,操作不可逆,請謹慎使用
- 需要有對應目錄的寫入/刪除權(quán)限
- 建議先測試運行,確認功能符合預期
-
-Force參數(shù)會強制刪除只讀文件,注意使用場景
如果需要調(diào)整功能(比如保留某些特定子目錄),可以進一步修改腳本邏輯。