用 Powershell 替换文件名的确切部分

Replace exact part of file name with Powershell

我尝试了找到的代码 here 但没有成功。

我需要的是用另一个替换精确文本,但是这段代码似乎不能处理精确文本。

这是我使用的代码,我需要的是,例如,将以“.L.wav”结尾的文件名替换为“_L.wav”,但是 powershell 甚至会尝试重命名以“.BL.wav[=25”结尾的文件=]”变成“_L.wav”。

谢谢。

ls *.* | Rename-Item -NewName {$_.name -replace ".L.wav","_L.wav"}
ls *.* | Rename-Item -NewName {$_.name -replace ".LFE.wav","_LFE.wav"}
ls *.* | Rename-Item -NewName {$_.name -replace ".R.wav","_R.wav"}
ls *.* | Rename-Item -NewName {$_.name -replace ".BL.wav","_LSR.wav"}
ls *.* | Rename-Item -NewName {$_.name -replace ".BR.wav","_RSR.wav"}
ls *.* | Rename-Item -NewName {$_.name -replace ".SL.wav","_LSS.wav"}
ls *.* | Rename-Item -NewName {$_.name -replace ".SR.wav","_RSS.wav"}
Read-Host -Prompt "Press Enter to exit" ```

正则表达式中的点表示任何字符。如果不逃避,事情就会出错。

尝试

Rename-Item -NewName {$_.Name -replace ('{0}$' -f [regex]::Escape('.L.wav')),'_L.wav'}

或手动转义正则表达式元字符:

Rename-Item -NewName {$_.Name -replace '\.L\.wav$','_L.wav'}

末尾的$锚定要匹配字符串末尾的文本

此外,与其使用 ls *.* | Rename-Item {...},不如使用

(Get-ChildItem -Filter '*.L.wav' -File) | Rename-Item {...}

(ls 是 Get-ChildItem 的别名)

  • 使用 -Filter 您可以指定要查找的文件。
  • 使用 -File 开关,确保不要同时尝试重命名文件夹对象。
  • 通过将代码的 Get-ChildItem 部分括在方括号中,您可以确保在开始重命名文件之前已完成文件的收集。否则,代码可能会尝试继续重命名已处理的文件。