PowerShell脚本开发:按父目录命名文件并递增序号
PowerShell脚本:按父文件夹重命名文件并统计数量
我帮你写了一个符合需求的PowerShell脚本,同时加入了同名文件检测、错误捕获等实用容错处理,能完美实现统计目标目录文件数量+按规则重命名的功能,具体如下:
# 定义目标目录路径,替换成你的实际路径 $targetDir = "D:\Your\Target\Directory" # 获取目标目录下的所有子文件夹(如果要直接处理目标目录本身,改成 Get-Item $targetDir 即可) $folders = Get-ChildItem -Path $targetDir -Directory foreach ($folder in $folders) { # 获取当前文件夹下的所有文件(排除子文件夹) $files = Get-ChildItem -Path $folder.FullName -File $fileCount = $files.Count # 输出统计信息 Write-Host "文件夹 [$($folder.Name)] 下共有 $fileCount 个文件" if ($fileCount -eq 0) { Write-Host "该文件夹下无文件,跳过重命名操作`n" continue } # 初始化计数器 $counter = 0 foreach ($file in $files) { # 构建新文件名:首个文件不加数字,后续依次递增 $newFileName = if ($counter -eq 0) { "$($folder.Name)$($file.Extension)" } else { "$($folder.Name)$counter$($file.Extension)" } $newFilePath = Join-Path -Path $folder.FullName -ChildPath $newFileName # 检查新文件名是否已存在,避免意外覆盖 if (Test-Path -Path $newFilePath) { Write-Warning "文件 [$newFilePath] 已存在,跳过该文件" $counter++ continue } # 执行重命名并捕获异常 try { Rename-Item -Path $file.FullName -NewName $newFileName -ErrorAction Stop Write-Host "已重命名:[$($file.Name)] -> [$newFileName]" } catch { Write-Error "重命名文件 [$($file.Name)] 失败:$_" } $counter++ } Write-Host "`n" }
功能与细节说明
- 统计文件数量:脚本会遍历每个目标文件夹,输出该文件夹下的文件总数,空文件夹会直接跳过重命名步骤。
- 重命名规则:严格按照你要求的逻辑:
- 文件夹内首个文件命名为
父文件夹名.扩展名 - 第二个及以后的文件依次命名为
父文件夹名1.扩展名、父文件夹名2.扩展名……
- 文件夹内首个文件命名为
- 容错处理:
- 自动检测同名文件,避免覆盖现有内容,遇到冲突会给出警告并跳过
- 捕获重命名过程中的异常(比如权限不足、文件被占用),确保脚本不会中途中断
- 灵活调整:
- 如果要直接处理目标目录本身(而非子文件夹),把
Get-ChildItem -Path $targetDir -Directory改成Get-Item $targetDir即可 - 如果需要递归处理所有嵌套子文件夹里的文件,给
Get-ChildItem添加-Recurse参数即可(此时每个文件会以自己的直接父文件夹名命名)
- 如果要直接处理目标目录本身(而非子文件夹),把
使用建议
- 先在测试目录上运行脚本,确认效果符合预期后再处理实际文件
- 运行脚本前,确保你有目标目录的读写权限
- 如果需要保留原文件备份,可以在重命名前先复制文件到其他位置
内容的提问来源于stack exchange,提问作者user3358300
相关产品推荐
相关产品推荐

