使用Windows PowerShell批量删除文件名中的“[”字符

时间:2018-01-27 22:17:16

标签: powershell text replace

尝试使用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)替换((括号),一切都按预期工作。

2 个答案:

答案 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