PowerShell:字符串替换每次都不起作用?

时间:2014-06-18 20:21:48

标签: powershell replace

我正在编写一个脚本来准备一个csv,以便将其上传到SQL中。

我有两个几乎相同的命令(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")

摆脱部分是一样的。第二个工作,它摆脱了所有的引用,但第一个不起作用,管道仍在。我尝试了不同的字符,但由于某种原因没有在这个位置工作。

我错过了什么?

谢谢!

1 个答案:

答案 0 :(得分:2)

使用|转义\符号,如\|,如下所示,它会正常工作;原因|是一个特殊字符(命令管道符号)。

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

因此,如果我输入dadad|xcvxvv|sdffgfg,那么在命令之后输出看起来像dadadxcvxvvsdffgfg