首页 文章

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

提问于
浏览
-1

尝试使用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

    是的,我看到你用蛮力解决了你的处境 . 此代码似乎生成您想要的文件名 .

    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
    
  • 2

    逃脱的特征是反斜杠 . 所以你的正则表达式应该是这样的:

    Get-ChildItem | 
        Rename-Item -NewName {$_.Name -replace '\[|\]','_'}
    

    这将取代开口方括号和关闭方括号 .

相关问题