Powershell 用powersell替换txt中的单词

Powershell 用powersell替换txt中的单词,powershell,powershell-2.0,Powershell,Powershell 2.0,我有一个txt文件,每行包含文件夹的所有路径 K:\AppData\Released_To_Production\EDCO\1632 K:\AppData\Released_To_Production\EDCO\1633 K:\AppData\Released_To_Production\EDCO\1634 我使用poweshell将K:\替换为D:\data\,所以它应该是这样的 D:\Data\AppData\Released_To_Production\EDCO\1632 D:\Data

我有一个txt文件,每行包含文件夹的所有路径

K:\AppData\Released_To_Production\EDCO\1632
K:\AppData\Released_To_Production\EDCO\1633
K:\AppData\Released_To_Production\EDCO\1634
我使用poweshell将
K:\
替换为
D:\data\
,所以它应该是这样的

D:\Data\AppData\Released_To_Production\EDCO\1632
D:\Data\AppData\Released_To_Production\EDCO\1633
D:\Data\AppData\Released_To_Production\EDCO\1634
它应该很简单,但我无法通过

Get-Content C:\work\path.txt | ForEach-Object { $_ -replace "K':''\'", "D':''\'Data" } | Set-Content C:\work\000.txt
输出文件中未替换任何内容


有什么建议吗?

试试本文中的Replace-FileString.ps1脚本:

Get-Content C:\work\path.txt  | % { $_.replace("K:\","D:\data\")} | Set-Content C:\work\000.txt


-Multiline参数告诉脚本^应该匹配行的开头(而不是文件的开头)。要使用包含替换字符串的副本覆盖文件,请添加-overwrite参数。

尝试本文中的Replace-FileString.ps1脚本:


-Multiline参数告诉脚本^应该匹配行的开头(而不是文件的开头)。要使用包含替换字符串的副本覆盖文件,请添加-overwrite参数。

实际上不需要ForEach对象。您可以通过一个步骤进行更换:

(Get-Content C:\work\path.txt) -replace "K:\\", "D:\Data" | Set-Content C:\work\000.txt

请注意,-replace的第一个参数是一个正则表达式,因此需要转义反斜杠。

实际上不需要ForEach对象。您可以通过一个步骤进行更换:

(Get-Content C:\work\path.txt) -replace "K:\\", "D:\Data" | Set-Content C:\work\000.txt
请注意,-replace的第一个参数是一个正则表达式,因此需要转义反斜杠。

另一种方法:

${C:\work\path.txt} -replace 'K:\\','D:\Data\' | Set-Content C:\work\000.txt
这是另一个转折点:-)

另一种方法:

${C:\work\path.txt} -replace 'K:\\','D:\Data\' | Set-Content C:\work\000.txt
这是另一个转折点:-)


这不起作用,因为Get Content将把
-replace
解释为一个参数,并且它没有replace参数。尝试使用parens来获取内容C:\work\path.txt.Doh!你说得对。我把它放在我的控制台里是正确的,但是当我在这里转录它的时候错过了帕伦斯。我已经编辑了我的答案。这不起作用,因为Get内容将把
-replace
解释为一个参数,并且它没有replace参数。尝试使用parens来获取内容C:\work\path.txt.Doh!你说得对。我把它放在我的控制台里是正确的,但是当我在这里转录它的时候错过了帕伦斯。我已经编辑了我的答案。这不是唯一有效的答案。Replace-FileString.ps1脚本也可以工作;我刚刚进行了测试和验证。我尝试了${C:\work\path.txt},可以看到它可以返回文件的内容。但我不明白为什么它会起作用。我对${…}语法的理解是,它用于创建包含非标准字符的变量名。为什么它读取文件的内容?无论如何,谢谢你今天教我新东西!可以使用变量语法访问每个驱动器。您可能已经完成了,但没有意识到,例如
$env:path
$function:prompt
。C是一个PSDrive,就像Env和Function一样。对于文件,您必须使用
${}
语法来读取文件的内容,例如
${c:foo.txt}
,该语法仅在foo.txt位于当前目录中时有效。或者您可以指定完整路径
${c:\work\path.txt}
。顺便说一句,我喜欢这个小例子,它演示了如何使用这种语法
${c:f1.txt},${c:f2.txt}=${c:f2.txt},${c:f1.txt}
。交换文件内容的语法相当简洁。这还表明,与任何变量一样,您也可以分配文件的内容。这不是唯一有效的答案。Replace-FileString.ps1脚本也可以工作;我刚刚进行了测试和验证。我尝试了${C:\work\path.txt},可以看到它可以返回文件的内容。但我不明白为什么它会起作用。我对${…}语法的理解是,它用于创建包含非标准字符的变量名。为什么它读取文件的内容?无论如何,谢谢你今天教我新东西!可以使用变量语法访问每个驱动器。您可能已经完成了,但没有意识到,例如
$env:path
$function:prompt
。C是一个PSDrive,就像Env和Function一样。对于文件,您必须使用
${}
语法来读取文件的内容,例如
${c:foo.txt}
,该语法仅在foo.txt位于当前目录中时有效。或者您可以指定完整路径
${c:\work\path.txt}
。顺便说一句,我喜欢这个小例子,它演示了如何使用这种语法
${c:f1.txt},${c:f2.txt}=${c:f2.txt},${c:f1.txt}
。交换文件内容的语法相当简洁。这还表明,与任何变量一样,您也可以分配文件的内容。