我有一个带有一些特殊字符$
的文本文件,需要用双引号替换。我正在使用一个bat文件,我在其中调用powershell.exe
并编写replace命令。以下是命令:
powershell "gc C:\Temp\Test.csv| foreach-object {$_ -replace '$','""""""'}|sc C:\Temp\Test_Replace.csv"
我知道双引号被双引号转义所以“”“”“相当于”“。但是如上面的代码所示,我需要写6个双引号来得到等价的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"