尝试使用PowerShell删除一个奇怪的字符,但它会一直打破[
:
文件名为test [t].txt
Dir | Rename-Item -NewName { $_.Name -replace "[","_" }
结果:
PS D:\test> Dir | Rename-Item -NewName { $_.Name -replace "[","_" } Rename-Item : The input to the script block for parameter 'NewName' failed. Invalid regular expression pattern: [. At line:1 char:27 + Dir | Rename-Item -NewName <<<< { $_.Name -replace "[","_" } + CategoryInfo : InvalidArgument: (test [t].txt:PSObject) [Rename-Item], ParameterBindingException + FullyQualifiedErrorId : ScriptBlockArgumentInvocationFailed,Microsoft.PowerShell.Commands.RenameItemCommand
我尝试了一些常用的方法来逃避角色\[
,'['
,...和nada。
思想和想法?
PS:尝试使用Replace()
转义\[
方法:
PS D:\test> Dir | Rename-Item -NewName{ $_.Name.Replace("\[","_")} Rename-Item : Cannot rename because item at 'Microsoft.PowerShell.Core\ FileSystem::D:\test\test [t].txt' does not exist. At line:1 char:18 + Dir | Rename-Item <<<< -NewName{ $_.Name.Replace("\[","_")} + CategoryInfo : InvalidOperation: (:) [Rename-Item], PSInvalidOperationException + FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.RenameItemCommand
PPS:文件存在:
PS D:\test> dir Directory: D:\test Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 1/27/2018 4:08 PM 448 rb.bat -a--- 1/27/2018 3:04 PM 4 test [t].txt
当PS在文件名中看到[
时,由PS内部的某些东西附加到路径上是问题所在。如果我用[
(paren)替换(
(括号),一切都按预期工作。
答案 0 :(得分:2)
逃脱字符是反斜杠。所以你的正则表达式应该是这样的:
Get-ChildItem |
Rename-Item -NewName {$_.Name -replace '\[|\]','_'}
这将取代开口方括号和关闭方括号。
答案 1 :(得分:0)
是的,我看到您用蛮力解决了您的情况。该代码似乎可以产生所需的文件名。
PS C:\src\t\renfunc> Get-ChildItem
Directory: C:\src\t\renfunc
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2018-09-11 08:51 7 test [2].txt
PS C:\src\t\renfunc> Get-ChildItem | ForEach-Object { $_.Name -replace '\[|\]','_' }
test _2_.txt