Win按照目录自动重命名文件的脚本

编辑于:2024年07月24日

Win按照目录自动重命名文件的脚本

前些时间下载了 全国小学、初中和高中全科全版本的教材,需要按照目录对文件做重命名处理,比如 D:\电子课本教科书\初中\语文\统编版\7年级上册.pdf 重命名为 初中_语文_统编版_7年级上册.pdf

脚本代码

# 设定根目录  
$rootDirectory = "D:\电子课本教科书\"  

# 设定移除目录

$yichu = "D:\电子课本教科书\" 
  
# 获取根目录下的所有文件(递归)  
$files = Get-ChildItem -Path $rootDirectory -Recurse -File  
  
foreach ($file in $files) {  
    # 获取文件的完整路径  
    $fullPath = $file.FullName  
  
    # 从完整路径中移除根目录部分,得到相对路径(包括文件名)  
    $relativePathWithFileName = $fullPath -replace [regex]::Escape($yichu), ""  
  
    # 分割相对路径以获取目录部分(不包括文件名)  
    $relativePathDirs = [System.IO.Path]::GetDirectoryName($relativePathWithFileName)  
  
    # 如果相对路径以目录分隔符开头,则去除它  
    if ($relativePathDirs.StartsWith("\")) {  
        $relativePathDirs = $relativePathDirs.Substring(1)  
    }  
  
    # 将目录部分的路径分隔符替换为下划线(或其他分隔符),并作为前缀  
    $newPrefix = $relativePathDirs -replace "\\", "_"  
  
    # 如果前缀非空,则在前缀和原始文件名之间添加一个分隔符(可选)  
    if (![string]::IsNullOrEmpty($newPrefix)) {  
        $newPrefix += "_"  
    }  
  
    # 生成新的文件名(前缀+原始文件名)  
    $newFileName = "$newPrefix$($file.Name)"  
  
    # 生成新的完整路径(实际上只是更改了文件名,目录保持不变)  
    $newFilePath = Join-Path $file.Directory.FullName $newFileName  
  
    # 输出旧路径和新路径以进行调试  
    Write-Output "CCCiTU Old Path: $fullPath"  
    Write-Output "CCCiTU New Path: $newFilePath"  
  
    # 如果新路径与旧路径不同,则重命名文件  
    if ($newFilePath -ne $fullPath) {  
        Rename-Item -Path $fullPath -NewName $newFileName -Force  
    }  
}  
  
# 脚本结束  
Write-Output "Renaming complete."

使用方法

假设在 D 盘根目录新建文本文档,将代码复制粘贴,然后把文件名改为 cccitu-mulu.ps1 (注意,原文件txt后缀,将变为.ps1)

打开Windows 自带的 PowerShell 分别执行如下命令:

cd D:\
.\cccitu-mulu.ps1

相关推荐

暂无评论