【问题标题】:Powershell script to remove quotes in filePowershell脚本删除文件中的引号
【发布时间】:2021-05-14 21:57:32
【问题描述】:

我需要帮助删除目录中所有文件内容中的双引号。我可以一次完成一个文件,而且速度太快,不确定如何在不影响性能的情况下对所有文件执行此操作。目录有600多个文件。

一个文件的 PS 脚本:

(gc C:\Temp\data.txt -En UTF8) | ForEach-Object {$_ -replace '"',''} | Out-File C:\Temp\data.txt -En UTF8

尝试使用以下代码处理文件夹中的所有文件。但是,它太慢了。

所有文件的 PS 脚本:

Get-ChildItem "C:\Temp" -Filter *.txt | 
Foreach-Object {
    $content = Get-Content $_.FullName

    #filter and replace content to the original file
    $content | % {$_ -replace '"', ''} 

    #save content to the same file name
    $content | Out-File $File.BaseName -En UTF8
}

【问题讨论】:

  • Get-Contentknown to be slow
  • 您的文件是文本文件还是 CSV 文件?如果是 CSV,那么简单地删除所有引号是危险的。阅读this
  • 嗨@Theo,它们都是文本文件。

标签: powershell


【解决方案1】:

假设每个输入文本文件作为一个整体适合内存(很有可能),您可以使用
Get-Content-Raw开关
如下,这大大加快了您的操作:

Get-ChildItem C:\Temp -Filter *.txt | 
  Foreach-Object {
    (Get-Content -Raw $_.FullName) -replace '"' |
      Set-Content -NoNewLine $File.BaseName -En UTF8
  }

注意:

  • -Raw 将文件的全部内容作为单个(通常)多行字符串读入内存。

  • 省略-replace 运算符的替换操作数隐式 使用''(空字符串)作为替换字符串。

  • 如果输入已经文本(字符串),Set-Content 的性能优于Out-File / >

  • -NoNewLine (PSv5+) 确保 Set-Content / Out-File 不会盲目地追加换行符。 (它实际上还禁止在(字符串化的)输入对象之间放置换行符,但在目前的情况下,只有 一个 输入对象)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-25
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    相关资源
    最近更新 更多