2014-06-18 142 views
0

我正在编写一个脚本来准备将csv上传到SQL中。PowerShell:字符串替换每次都不起作用?

我有两个几乎相同的命令(1和3),但第一个不起作用,第三个是。没有错误,它只是没有做我期望的事情。

我做了3个步骤,首先我摆脱了源文件中的所有管道(这是什么不起作用),然后我读取和写入CSV(这摆脱了使用引号的不同处理,而不是使用引号并将分隔符更改为管道)。最后,我摆脱了所有报价,因为除了分隔符之外不应再有其他管道。

# --------------------------------------------------------- 
# 1. Get rid of all pipes 
#---------------------------------------------------------- 
get-content ($csvfile + ".csv") | ForEach-Object { $_ -replace "|",""} | Set-Content ($csvfile + "2.csv") 

# --------------------------------------------------------- 
# 2. Make standard CSV but use Pipes as delimiter 
#---------------------------------------------------------- 
Import-csv -path ($csvfile + "2.csv") -Delimiter ',' | Export-CSV -path ($csvfile + " 3.csv") -Delimiter '|' 

# --------------------------------------------------------- 
# 3. Get rid of all Quotes 
#---------------------------------------------------------- 
get-content ($csvfile + "3.csv") | ForEach-Object { $_ -replace '"',""} | Set-Content ($csvfile + "4.csv") 

摆脱零件是相同的。第二个工作,它摆脱了所有的报价,但第一个不起作用,管道仍然在。我尝试了不同的角色,但由于某种原因,没有在这个位置工作。

我错过了什么?

谢谢!

回答

2

只是逃脱|符号与\\|如下,它会正常工作;原因|是一个特殊字符(命令管道符号)。

get-content ($csvfile + ".csv") | ForEach-Object { $_ -replace "\|",""} | 
Set-Content ($csvfile + "2.csv") 

所以,如果我有一个像dadad|xcvxvv|sdffgfg然后输入命令后的输出看起来像dadadxcvxvvsdffgfg

+0

太谢谢你了!就是这样。我之前没有想过这件事,我感到很难过。 – MarcoK

+0

好的,这就是学习的过程。 – Rahul