批量刪除子文件夾-Ps1

編寫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é)束"
}

功能說明:

  1. 模塊化設(shè)計

    • Get-FolderSize:計算指定文件夾的總大小
    • Format-FileSize:將字節(jié)大小轉(zhuǎn)換為易讀的格式(GB/MB/KB/Bytes)
    • Remove-SubDirectories:主邏輯函數(shù),處理刪除和統(tǒng)計
  2. 主要功能

    • 輸入主目錄路徑
    • 刪除所有子目錄及其內(nèi)容
    • 統(tǒng)計并顯示每個子目錄的大小以及總大小
    • 添加操作確認,避免誤刪
  3. 錯誤處理

    • 檢查路徑是否存在
    • 處理刪除失敗的情況
    • 處理大小計算錯誤

使用方法:

  1. 將代碼保存為 .ps1 文件(例如 remove_subdirs.ps1
  2. 在 PowerShell 中運行
  3. 輸入主目錄路徑
  4. 確認刪除操作

示例輸出:

請輸入主目錄路徑: 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)整功能(比如保留某些特定子目錄),可以進一步修改腳本邏輯。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容