Powershell替换包含

时间:2018-06-06 09:01:53

标签: windows powershell batch-file cmd

我有一个.txt文件,其中包含一些重要的内容。其中一条是通往我存储某些文件的地方。此路径在.txt文件中的两个位置使用。

"path" : "D:\\final_test\\abc"

" ABC"是一个目录名,并且它一直是其他名称,因为我想用get-content和powershell替换该路径。

我做了很少的尝试,当我做这样的事情时

powershell -Command "(gc test.txt) -replace 'abc', 'XYZ' | Out-file test.txt

一切正常,但是当我做这样的事情时

powershell -Command "(gc test.txt) -replace 'D:\\final_test\\abc', 'D:\\final_test\\XYZ' | Out-file test.txt

或类似的东西

powershell -Command "(gc test.txt) -replace '^D:\\final_test\\.*$', 'D:\\final_test\\XYZ' | Out-file test.txt

它不会工作(在.txt文件中没有任何改变)。

当然最好的方法是更换" D:\\ final_test \\ ...." (不管是什么," final_test \\")。

你能以某种方式帮助我吗? 我不确定,但看起来有一些问题"反斜杠"标志。

3 个答案:

答案 0 :(得分:3)

由于反斜杠字符是正则表达式中的转义字符,因此必须在-replace命令的第一部分中将它们加倍。 这应该有效:

powershell -Command "(gc test.txt) -replace 'D:\\\\final_test\\\\abc', 'D:\\final_test\\XYZ' | Out-file test.txt

答案 1 :(得分:1)

我不确定你要改变的路径的哪一部分,但试试这个?

powershell -Command "(gc test.txt) -replace '^D:\\final_test\\', 'D:\New_Name\' | Out-file test.txt

答案 2 :(得分:1)

-replace函数使用正则表达式,因此您必须转义一些正则表达式字符。无论如何,这是我要使用的正则表达式:

(Get-Content .\test.txt) -replace '(?<="path" : ")[^"]+',  'D:\\final_test\\XYZ' | Set-Content test.txt