我在网上找到了与这些类似的命令。我想将文件名中的括号替换为空格或空字符串。
我尝试更改的文件如下所示:
Nehemiah (1).mp3
Nehemiah (2).mp3
Nehemiah (11).mp3
Run Code Online (Sandbox Code Playgroud)
真的,我也希望它们看起来像下面这样:
Nehemiah 01.mp3
Nehemiah 02.mp3
Nehemiah 11.mp3
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的脚本。
Dir | Rename-Item –NewName { $_.name –replace “(“,”” }
Dir *.mp3 | rename-item -newname { $_.name -replace " ("," " }
Run Code Online (Sandbox Code Playgroud)
这些都不起作用。
这是我收到的错误消息。
Rename-Item :参数“NewName”的脚本块输入失败。正则表达式模式 ( 无效。在 line:1 char:34 + Dir *.mp3 | rename-item -newname { $_.name -replace " ("," " } + ~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (C:\Users...ehemiah (1).mp3:PSObject) [Rename-Item ], 参数 ndingException +fullyQualifiedErrorId : ScriptBlockArgumentInvocationFailed,Microsoft.PowerShell.Commands.RenameItemCommand
正如您在Mathias R Jessen 的评论中所见,-replace支持正则表达式,您需要考虑到这一点。静态方法Escape可以帮助自动转义字符串中的正则表达式元字符,以便在您看到它们时看起来更具可读性和功能。
我确实设法在 MSDN上找到了有关使用[regex]::escape()以下方法转义的字符的内容:
通过将它们替换为转义码来转义最少的一组字符(\、*、+、?、|、{、[、(,)、^、$、.、# 和空格)。这指示正则表达式引擎按字面解释这些字符而不是元字符。
但是,由于您实际上并不需要在这里使用正则表达式,因此我建议您使用 string 方法,.replace()因为它可以在没有额外开销的情况下完成相同的操作。
Get-ChildItem "*.mp3" | Rename-Item -NewName {($_.name).Replace(" ("," ")}
Run Code Online (Sandbox Code Playgroud)
字符填充改变了一些东西。我会在那里选择正则表达式,因为拆分字符串并将它们重新组合在一起要容易得多。
Get-ChildItem "*.mp3" |
Where-Object{$_.name -match "\((\d+)\)"}
Rename-Item -NewName {
[regex]::Replace($_.Name,"\((\d+)\)",{param($match) ($match.Groups[1].Value).PadLeft(2,"0")})
}
Run Code Online (Sandbox Code Playgroud)
感谢PetSerAl 帮助解决此反向引用替换解决方案。
| 归档时间: |
|
| 查看次数: |
2050 次 |
| 最近记录: |