You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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:拿到不带扩展名的文件名,比如ThisFolder09
  • Substring(0, $file.BaseName.Length - 2):截取从开头到倒数第三位的字符串,也就是去掉最后两位数字,得到ThisFolder
  • Replace("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

火山引擎 最新活动