简化基于Powershell的文件编辑

时间:2011-07-26 19:32:18

标签: powershell powershell-v2.0

所以我目前有一组csv文件,我梳理并替换使用powershell的各个部分。但是,我目前使用的流程非常耗费时间,我想知道是否有更精简的解决方案。

当前代码:(这包含在每个循环的a中,其中$ file是文件位置,$ tb是表的名称)

Invoke-sqlcmd -query "select Distinct * from $($tb.name) WITH (NoLock)" -server server -database database | Export-CSV $file -Delimiter "|" -Encoding "Unicode" -NoTypeInformation
(get-content $file) -replace '"?\|"?', "|" | out-file $file
(get-content $file) -replace '\|true\|', '|1|' | out-file $file
(get-content $file) -replace '\|false\|', '|0|' | out-file $file
(get-content $file) -replace '^"' | out-file $file
(get-content $file) -replace '"$' | out-file $file
(get-content $file) -replace '^true\|', '1|' | out-file $file
(get-content $file) -replace '^false\|', '0|' | out-file $file
(get-content $file) -replace 'true$', '1' | out-file $file
(get-content $file) -replace 'false$', '0' | select -Skip 1 | out-file $file
(get-content $file) -replace '\|false\|', '|0|' | out-file $file
}

2 个答案:

答案 0 :(得分:4)

@EBGreen的回答,这可能是解决方案。只是为了向您展示如何操作(以及如何链接运算符),我将添加代码:

Invoke-SqlCmd...
(get-content $file) -replace '"?\|"?', "|" `
                    -replace '\|true\|', '|1|'`
...
                    -replace '\|false\|', '|0|' | out-file $file

除此之外,请考虑在将数据导出为csv之前更换。您可以从Invoke-SqlCmd查看集合并替换相应的属性值。 还要考虑将true替换为1而将false替换为0是否会删除大多数正则表达式。

答案 1 :(得分:3)

我看到的第一个也是最明显的事情是你从磁盘上加载文件并为每次替换写回来。我要做的第一个优化是将文件加载到内存中一次,在内存中替换它,然后将其写回磁盘。

类似的东西:

$contents = (get-content $file) -replace '"?\|"?', "|"
$contents = $contents -replace '\|true\|', '|1|'
e
t
c
.
.
.
$contents | out-file $file