PowerShell实现文件复制并移除文件名末尾两位数字后缀的方法
PowerShell实现文件复制并移除文件名末尾两位数字后缀的方法
嗨,我来帮你搞定这个文件复制并重命名的需求!咱们可以用PowerShell的几个基础命令组合起来轻松实现,具体步骤和代码我给你拆解清楚:
1. 先定位到目标文件
首先得把D盘里所有符合“文件名末尾带两位数字的.mp3文件”找出来,比如ThisFolder09.mp3这类。用Get-ChildItem就能遍历到这些文件:
$sourceFiles = Get-ChildItem -Path "D:\" -Recurse -Filter "*[0-9][0-9].mp3"
这里的-Filter "*[0-9][0-9].mp3"专门匹配文件名最后两位是数字的.mp3文件,-Recurse会自动遍历D盘下的所有子文件夹,刚好适配你的文件夹结构。
2. 逐个处理文件(复制+重命名)
接下来咱们循环处理每个找到的文件,核心是去掉文件名末尾的两位数字,再把文件复制到E盘对应文件夹里:
# 获取所有符合条件的源文件 $sourceFiles = Get-ChildItem -Path "D:\" -Recurse -Filter "*[0-9][0-9].mp3" foreach ($file in $sourceFiles) { # 提取去掉末尾两位数字的新文件名前缀 $newBaseName = $file.BaseName.Substring(0, $file.BaseName.Length - 2) # 拼接新的完整文件名(前缀+扩展名) $newFileName = "$newBaseName$($file.Extension)" # 构建E盘的目标文件夹路径(和D盘结构一致,只换盘符) $targetFolder = $file.DirectoryName.Replace("D:\", "E:\") # 拼接最终的目标文件路径 $targetFilePath = Join-Path -Path $targetFolder -ChildPath $newFileName # 确保目标文件夹存在,不存在就自动创建 if (-not (Test-Path -Path $targetFolder)) { New-Item -ItemType Directory -Path $targetFolder -Force | Out-Null } # 复制文件到目标位置,-Force参数会覆盖已存在的同名文件(不需要可以去掉) Copy-Item -Path $file.FullName -Destination $targetFilePath -Force }
3. 关键代码解释
$file.BaseName:拿到不带扩展名的文件名,比如ThisFolder09Substring(0, $file.BaseName.Length - 2):截取从开头到倒数第三位的字符串,也就是去掉最后两位数字,得到ThisFolderReplace("D:\", "E:\"):把源文件夹的盘符换成E盘,保证目标文件夹结构和源目录一致Join-Path:安全拼接路径,避免手动拼字符串出现格式错误New-Item -Force:如果目标文件夹不存在就自动创建,存在的话也不会报错
4. 测试建议
你可以先找个测试文件(比如D:\TestFolder\TestFolder05.mp3),先跑下面这段测试代码确认效果,没问题再批量处理所有文件:
# 测试单个文件 $testFile = Get-ChildItem -Path "D:\TestFolder\TestFolder05.mp3" $newBaseName = $testFile.BaseName.Substring(0, $testFile.BaseName.Length - 2) $newFileName = "$newBaseName$($testFile.Extension)" $targetFolder = $testFile.DirectoryName.Replace("D:\", "E:\") $targetFilePath = Join-Path -Path $targetFolder -ChildPath $newFileName Write-Host "源文件路径:$($testFile.FullName)" Write-Host "目标文件路径:$targetFilePath" # 确认路径正确后,再取消下面一行的注释执行复制 # Copy-Item -Path $testFile.FullName -Destination $targetFilePath -Force
备注:内容来源于stack exchange,提问作者JohnB17




