我需要创建一个powershell脚本,以用户友好的拖放方式从CSV文件中删除引号。我有这个页面的基础知识:
我已经成功地将.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,但也没用。
感谢您的帮助!
答案 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,则计算机将开始交换,从而导致性能显着下降。