我需要紧急帮助。我尝试使用本文中的解决方案之一自动重命名文件:循环文件夹/文件并替换单词
但是在使用该示例时,大量文件是 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 而是在其位置上硬编码 '' ,在任何绝望的尝试中更改文件名的任何部分。 关于这是如何发生的以及是否有恢复的机会有什么想法吗?
不幸的是,这看起来像是您在受影响的 MP3 文件中写入了垃圾。您唯一的选择是从另一个来源恢复它们(备份、下载、从 CD 翻录。)
哪里出了问题?在
Set-Content
部分。该 cmdlet 会将数据写入到文件中,而您只想重命名该文件。用于重命名的正确 cmdlet 是 Rename-Item
。
对于未来的尝试,请尝试使用
-WhatIf
开关。它受多个 cmdlet 支持,并且会告诉您该命令将要执行的操作,但尚未实际执行。检查其输出,仅当您确定输出看起来合理时才拆下开关。