1

我需要创建一个 powershell 脚本,以用户友好的拖放方式从 CSV 文件中删除引号。我通过此页面了解了脚本的基础知识:

http://blogs.technet.com/b/heyscriptingguy/archive/2011/11/02/remove-unwanted-quotation-marks-from-csv-files-by-using-powershell.aspx

由于这个堆栈溢出问题,我已经成功地使 .ps1 文件可拖放:

拖放到 Powershell 脚本

答案的作者暗示,删除单个文件、许多文件和包含大量文件的文件夹同样容易。但是,我还没有以一种也可以写回源文件的方式来解决这个问题。这是我当前的代码:

Param([string[]]$file)
(gc $file) | % {$_ -replace '"', ""} | out-file C:\Users\pfoster\Desktop\Output\test.txt -Fo -En ascii

目前,这将只接受一个文件,并将结果作为 txt 输出到指定文件,而不管源文件类型如何(我可以轻松地将其更改为 CSV,但我希望脚本镜像源)。理想情况下,我希望它接受文件和文件夹,并重写源文件。我感觉这将涉及 get-ChildItem 但我不确定如何在当前场景中实现它。我也尝试过 out-file $file ,但也没有用。

谢谢您的帮助!

4

1 回答 1

0

要将修改后的内容写回原始文件,请尝试以下操作:

foreach ($file in $ARGS) {
  (Get-Content $file) -replace '"', '' | Out-File $file -Encoding ASCII -Force
}

使用foreach in循环,因为您需要管道中多个位置的文件名。在子 shell 中读取内容,然后将修改后的内容通过管道传输到Out-Filecmdlet 中,以确保仅在读取内容后才写入输出文件。

不要使用重定向运算符 ( (Get-Content $file) >$file),因为这会首先打开文件进行写入(实际上是截断它),然后从现在为空的文件中读取内容。

请注意,这种方法可能会导致大文件出现问题,因为每个文件在处理并写回磁盘之前都会完全读入 RAM。如果文件不适合可用 RAM,计算机将开始交换,从而导致性能显着下降。

于 2013-10-16T17:00:32.413 回答