【问题标题】:PowerShell: String replacement doesn't work every time?PowerShell:字符串替换并非每次都有效?
【发布时间】:2014-06-19 04:34:16
【问题描述】:

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

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

摆脱的部分是相同的。第二个有效,它消除了所有引号,但第一个无效,管道仍在。我尝试了不同的字符,但由于某种原因,在这个位置没有一个有效。

我错过了什么?

谢谢!

【问题讨论】:

    标签: powershell replace


    【解决方案1】:

    只需使用\ 转义| 符号,如下所示\|,它将正常工作;因为| 是一个特殊字符(命令行符号)。

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

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

    【讨论】:

    • 非常感谢!就是这样。我很遗憾没有早点考虑这个问题。
    猜你喜欢
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多