用双引号

时间:2016-02-29 20:32:16

标签: powershell replace

我有一个带有一些特殊字符$的文本文件,需要用双引号替换。我正在使用一个bat文件,我在其中调用powershell.exe并编写replace命令。以下是命令:

powershell "gc C:\Temp\Test.csv| foreach-object {$_ -replace '$','""""""'}|sc C:\Temp\Test_Replace.csv"

我知道双引号被双引号转义所以“”“”“相当于”“。但是如上面的代码所示,我需要写6个双引号来得到等价的2引号。我无法想象出于这个原因。

有人可以说明我错过的一点。

2 个答案:

答案 0 :(得分:1)

正如我在评论中所说,我认为它是一个但在PowerShell.exe命令行解析器中。当它在引用的上下文中看到""时,它不仅会生成文字",还会生成关闭引用的上下文:

CMD> powershell '"1  2""3  4"'
1  2"3 4

正如您所看到的,在打印的字符串中,只有一个空格在四分之一中。您需要添加额外的双引号来重新打开引用的上下文:

CMD> powershell '"1  2"""3  4"'
1  2"3  4

因此,事实上,你必须将双引号重复三次以产生一个双字引号字符。

答案 1 :(得分:0)

您只需要正确地转义嵌套的双引号。此外,ForEach-Object不是必需的。将Get-Content放在表达式中(即在括号中),您可以直接使用-replace运算符。

powershell -Command "(gc C:\Temp\in.csv) -replace '$','\"\"'|sc C:\Temp\out.csv"

如果要替换文字$字符而不是在每行的末尾添加双引号,则需要转义$,正如Mathias所指出的那样:

powershell -Command "(gc C:\Temp\in.csv) -replace '\$','\"\"'|sc C:\Temp\out.csv"