我正在编写一个脚本,该脚本将查找并替换一个单词的所有实例。但是我不确定如何保存更改。
$file = Get-Content "C:\Script.dat" -Raw
$old = 'oldword'
$new = 'newword'
$file.Replace($old,$new)
最初,我使用了以下内容,但这会引起问题。
$file.Replace($old,$new) | Set-Content $file
这导致了该问题的错误
Set-Content : Cannot find drive. A drive with the same *some random stuff*...
我将如何保存更改和/或解决上述问题?
答案 0 :(得分:2)
$file = Get-Content "C:\Script.dat" -Raw
$old = 'oldword'
$new = 'newword'
$file.Replace($old,$new) | Out-File -FilePath C:\Script.dat
答案 1 :(得分:1)
您非常接近,但是Set-Content
需要做两件事:文件位置的路径和要存储的值。就个人而言,我更喜欢在使用.Replace()
方法时覆盖变量,而不是将其通过管道传递到其他cmdlet中。
这可以做到:
$file = Get-Content "C:\Script.dat" -Raw
$old = 'oldword'
$new = 'newword'
$file = $file.Replace($old,$new)
Set-Content -Path "C:\Script.dat" -Value $file
如果可能,请尝试避免将文件直接存储在C:\
上,因为这通常需要管理员权限才能写入。
此外,您可以通过与原来列出的方式类似的方法来管道传输到Set-Content
,但仍需要为其提供文件路径:
$file.Replace($old,$new) | Set-Content "C:\Script.dat"