Skip to main content

擦盤子

 整理多個硬盤,看那些以TB為單位的電子書們,想起已死的國學數典讀書園地,那些pdg的加密解密鎖機器碼⋯⋯回顧起來,還可莞爾。超星盜版,再被以學術為公器的理由拖庫,誰錯了?反正今天流布的電子書,保守估計,半數以上都來自那些年那些人⋯⋯

今時所需,雖非唾手,也都可得,所以,

先去掉一頁一頁的書

Get-ChildItem -Path 'D:\' -Recurse -Filter *.pdg -ErrorAction SilentlyContinue | Remove-Item -Force -ErrorAction SilentlyContinue

再去重複

# 获取所有文件

$allFiles = Get-ChildItem -Path $rootPath -Recurse -File -ErrorAction SilentlyContinue

# 文件总数

$totalFiles = $allFiles.Count

$currentFileIndex = 0

# 计算哈希并分组,显示进度

$files = $allFiles | ForEach-Object {

    $currentFileIndex++

    $file = $_  

    # 显示进度

    Write-Progress -Activity "Calculating file hashes" -Status "$currentFileIndex of $totalFiles" -PercentComplete (($currentFileIndex / $totalFiles) * 100)

    try {

        # 尝试获取文件的哈希值

        $hash = Get-FileHash $file.FullName -ErrorAction Stop

        return [PSCustomObject]@{

            Path = $file.FullName

            Hash = $hash.Hash

        }

    } catch {

        Write-Warning "Unable to process file $($file.FullName): $_"

    }

} | Group-Object -Property Hash

# 处理重复文件

foreach ($group in $files) {

    if ($group.Count -gt 1) {

        # 跳过分组中的第一个文件(保留一份副本),删除其他所有重复文件

        $group.Group | Select-Object -Skip 1 | ForEach-Object {

            Remove-Item $_.Path -Force -ErrorAction SilentlyContinue

            Write-Host "Removed duplicate file: $($_.Path)"

        }

    }

}

# 完成

Write-Progress -Activity "Calculating file hashes" -Completed

Write-Host "Duplicate file removal process completed."


8萬多個文件⋯⋯刪除空文件夾

# 定义要检查的根目录

$rootPath = 'D:\'

# 递归函数,删除所有空文件夹

function Remove-EmptyDirectories {

    param (

        [String]$Path

    )

    # 获取当前路径下的所有子目录

    $directories = Get-ChildItem -Path $Path -Directory -Force -ErrorAction SilentlyContinue

    # 对每个子目录递归调用此函数

    foreach ($directory in $directories) {

        Remove-EmptyDirectories -Path $directory.FullName

    }

    # 再次检查当前目录下是否有子目录或文件,如果没有,则删除当前目录

    $items = Get-ChildItem -Path $Path -Force -ErrorAction SilentlyContinue

    if ($items.Count -eq 0) {

        Remove-Item -Path $Path -Force -ErrorAction SilentlyContinue

        Write-Host "Deleted empty directory: $Path"

    }

}

# 开始从根目录删除空文件夹

Remove-EmptyDirectories -Path $rootPath

Write-Host "Completed removing empty directories."

分類:
# 定义源路径
$sourcePath = 'D:\'
# 定义目标文件夹的基本路径
$destinationBasePath = 'D:\SortedFiles'

# 定义文件类型和目标文件夹名的映射
$fileTypeFolders = @{
    'Images' = @('*.jpg', '*.jpeg', '*.png', '*.gif', '*.bmp', '*.tif', '*.tiff')
    'Videos' = @('*.mp4', '*.avi', '*.mov', '*.wmv', '*.flv', '*.mkv')
    'Documents' = @('*.doc', '*.docx', '*.ppt', '*.pptx', '*.xls', '*.xlsx', '*.pdf', '*.txt')
    'Audio' = @('*.mp3', '*.wav', '*.aac', '*.flac', '*.m4a', '*.wma')
    'Others' = @('*.*')
}

# 遍历文件类型,为每种类型创建目标文件夹并移动文件
foreach ($folder in $fileTypeFolders.Keys) {
    $filePatterns = $fileTypeFolders[$folder]
    $destinationPath = Join-Path -Path $destinationBasePath -ChildPath $folder

    # 如果目标文件夹不存在,则创建
    if (-not (Test-Path -Path $destinationPath)) {
        New-Item -ItemType Directory -Path $destinationPath | Out-Null
    }

    # 获取匹配文件的总数
    $totalFiles = (Get-ChildItem -Path $sourcePath -Recurse -File -Include $filePatterns -ErrorAction SilentlyContinue).Count
    $processedFiles = 0

    foreach ($pattern in $filePatterns) {
        Get-ChildItem -Path $sourcePath -Recurse -File -Include $pattern -ErrorAction SilentlyContinue | ForEach-Object {
            $processedFiles++
            $percentComplete = ($processedFiles / $totalFiles) * 100

            # 更新进度条
            Write-Progress -Activity "Moving $folder files" -Status "$processedFiles of $totalFiles processed" -PercentComplete $percentComplete

            $destinationFilePath = Join-Path -Path $destinationPath -ChildPath $_.Name
            $newFilePath = $destinationFilePath

            # 如果目标文件夹中已存在同名文件,则重命名新文件
            $counter = 1
            while (Test-Path -Path $newFilePath) {
                $fileExtension = [System.IO.Path]::GetExtension($destinationFilePath)
                $fileNameWithoutExtension = [System.IO.Path]::GetFileNameWithoutExtension($destinationFilePath)
                $newFileName = "${fileNameWithoutExtension}_$counter$fileExtension"
                $newFilePath = Join-Path -Path $destinationPath -ChildPath $newFileName
                $counter++
            }

            # 使用-LiteralPath参数移动文件,以正确处理包含特殊字符的文件名
            Move-Item -LiteralPath $_.FullName -Destination $newFilePath -Force
        }
    }

    # 完成当前文件类型的处理后,清除进度条
    Write-Progress -Activity "Moving $folder files" -Completed
}

Write-Host "All files have been sorted into folders based on their type."


最後,合併常用書到MAC系統備份盤,上課可以隨時調取了。其實真正日用的書,大多還是在阿里雲盤⋯⋯百度幾個雲盤,因為百度的德性,早已多廢棄了。


下載Windows 11 Insider Preview Build 26058,下載Rufus重裝win系統,安裝介面爽利了很多。
irm https://massgrave.dev/get | iex
這個確實不怎麼合適,但⋯⋯實在懶得用學校正版了。

整理幾個小U盤,格式化為exFAT。

睡。

Comments