尝试使用 Powershell 重命名后文件损坏

问题描述 投票:0回答:1

我需要紧急帮助。我尝试使用本文中的解决方案之一自动重命名文件:循环文件夹/文件并替换单词

但是在使用该示例时,大量文件是 mp3 文件,并且它们似乎不再能够播放以前的音频。经过多次尝试和错误后,似乎没有任何东西可以改变这些文件名。我只是想从所有文件名中删除某个短语。在这一次尝试之后,我可以看到文件发生了一些事情,因为我可以看到 Windows 资源管理器一个接一个地刷新文件,但永远无法更改文件名,但是当我看到由于某种原因文件大小正在变化。你瞧,这些文件不再播放音频。所以我想知道这些文件到底发生了什么以及是否有希望恢复它们。这是脚本(目录已更改):

$matchString = 'Final'
$replaceString = ''
$files = Get-ChildItem -Path 'M:\Music\SomeProject' -filter *.mp3 -File
foreach ($file in $files) {
    $matchFound = $false
    $output = switch -regex -file $file.fullname {
        $matchString { $_ -creplace $matchString,''
                       $matchFound = $true
        }
        default { $_ }
    }
    if ($matchFound) {
        $output | Set-Content $file.fullname
    }
}

我怀疑问题的发生是由于我不再引用 $replaceString 而是在其位置上硬编码 '' ,在任何绝望的尝试中更改文件名的任何部分。 关于这是如何发生的以及是否有恢复的机会有什么想法吗?

powershell file file-rename
1个回答
0
投票

不幸的是,这看起来像是您在受影响的 MP3 文件中写入了垃圾。您唯一的选择是从另一个来源恢复它们(备份、下载、从 CD 翻录。)

哪里出了问题?在

Set-Content
部分。该 cmdlet 会将数据写入到文件中,而您只想重命名该文件。用于重命名的正确 cmdlet 是
Rename-Item

对于未来的尝试,请尝试使用

-WhatIf
开关。它受多个 cmdlet 支持,并且会告诉您该命令将要执行的操作,但尚未实际执行。检查其输出,仅当您确定输出看起来合理时才拆下开关。

© www.soinside.com 2019 - 2024. All rights reserved.