PowerShell:两个选项:替换文件名的特殊字符

mu0hgdu0  于 2023-10-18  发布在  Shell
关注(0)|答案(1)|浏览(114)

我不知道Powershell,而且我的大部分工作都是在CMD中完成的。我遇到了两种方法,我认为在PowerShell中做同样的事情(用合法字符替换非法字符兼容的W/ Windows文件资源管理器)?我想知道下面的一个是否比另一个更值得推荐?他们中的任何一个真的不推荐吗?
Get-ChildItem -File -Recurse | Rename-Item -NewName {$_.name -replace "\]", ")"}
Get-ChildItem -File -Recurse | % { Rename-Item -Path $_.PSPath -NewName $_.Name.replace("\]", ")"}
也想知道为什么下面两个是他们的方式。似乎有人会出错。
$_.name -replace
$_.Name.replace
谢谢你的任何信息。

gudnpqoy

gudnpqoy1#

这两种方法都可以使用,但区别在于.Replace是文字替换,在您的示例中,它将尝试查找并替换文字\],而-replace使用正则表达式,如果您想要匹配文字],则需要使用\对该字符进行转义。请参见转义字符。
在这两个例子中,我绝对建议执行预过滤,只查找包含]的文件。如果您希望两者完全相同(从文件中将]替换为)),则:

# With -replace:
Get-ChildItem -Filter *]* -File -Recurse |
    Rename-Item -NewName { $_.Name -replace '\]', ')' }

# With .Replace:
Get-ChildItem -Filter *]* -File -Recurse |
    Rename-Item -NewName { $_.Name.Replace(']', ')') }

相关问题