我正在编写一个脚本来准备一个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")
摆脱部分是一样的。第二个工作,它摆脱了所有的引用,但第一个不起作用,管道仍在。我尝试了不同的字符,但由于某种原因没有在这个位置工作。
我错过了什么?
谢谢!
答案 0 :(得分:2)
使用|
转义\
符号,如\|
,如下所示,它会正常工作;原因|
是一个特殊字符(命令管道符号)。
get-content ($csvfile + ".csv") | ForEach-Object { $_ -replace "\|",""} |
Set-Content ($csvfile + "2.csv")
因此,如果我输入dadad|xcvxvv|sdffgfg
,那么在命令之后输出看起来像dadadxcvxvvsdffgfg