2016-02-29 247 views
0

我有一個帶有一些特殊字符$的文本文件,需要用雙引號替換。我正在使用一個bat文件,其中我調用powershell.exe並編寫replace命令。下面是命令:用雙引號替換特殊字符

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

我知道的是雙引號用雙引號逃脫這樣「」「」」等同於‘’但在上面的代碼中看到我需要寫6個引號。拿到相當於2個引號。我想不通這樣做的原因。

有人可以請說明我錯過了點。

+1

'-replace'使用正則表達式。轉義'$'(這是正則表達式中字符串末尾的特殊字符):'$ _ -replace'\ $','「」「」「」''' –

+0

個人而言,我會在' PowerShell.exe命令行解析器。 ''''序列的處理非常奇怪,所以我建議不要使用它,而是使用'\「'代替 – PetSerAl

回答

0

你只需要正確轉義嵌套雙引號。此外,ForEach-Object ISN」將表達式(即括號內)置於Get-Content中,您可以使用-replace operato直接。

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

如果要替換的文字,而不是$字符加雙引號到每一行的結束,你需要躲避$爲好,因爲馬蒂亞斯指出:

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

非常感謝您改進邏輯。我提供的語句完成了這項工作(獲得兩個雙引號每個字面$),但不清楚6個雙引號而不是4個工作是否完成。 – MaveriK

1

正如我所說的在評論中,我認爲這是一個但是在PowerShell.exe命令行解析器。當看到""引用上下文中,它不僅產生字面"也接近引述方面:

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

正如你所看到的,只有一個3之間的4串印製空間。你需要把額外的雙引號重新報價方面:

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

所以,其實,你必須一式三份的雙引號,產生只有一個字面雙引號字符。