Powershell脚本通过拖放回写源代码

时间:2013-10-16 13:40:48

标签: powershell scripting

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

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

我已经成功地将.ps1文件拖放到这个堆栈溢出问题的拖拽下来了:

Drag and Drop to a Powershell script

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

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,但也没用。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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