Powershell 是否有办法搜索文件、替换文件中的某些文本并仅保存编辑的文本

Powershell 是否有办法搜索文件、替换文件中的某些文本并仅保存编辑的文本,powershell,replace,Powershell,Replace,我想做我自己的小型加密解密工具。我已经有了加密脚本和“数据库”,我现在只需要解密工具。现在出现了PowerShell脚本。我在一个文本文件中有多个字符串,我的加密密码保存在其中,脚本应该在文本文件中搜索这些字符串并用密码替换它们,而不仅仅是编辑的文本(解密的密码)需要保存在另一个文件中。有没有办法用PowerShell做到这一点 我尝试了-replace,但是只更改了一个字符串,文件的其余部分也保存了下来 $1 = "abc" (Get-Content Text.txt) | ForEach-

我想做我自己的小型加密解密工具。我已经有了加密脚本和“数据库”,我现在只需要解密工具。现在出现了PowerShell脚本。我在一个文本文件中有多个字符串,我的加密密码保存在其中,脚本应该在文本文件中搜索这些字符串并用密码替换它们,而不仅仅是编辑的文本(解密的密码)需要保存在另一个文件中。有没有办法用PowerShell做到这一点

我尝试了
-replace
,但是只更改了一个字符串,文件的其余部分也保存了下来

$1  = "abc"
(Get-Content Text.txt) | ForEach-Object { $_ -replace $1, "`na" } | Set-Content EditedText.txt

$2  = "def"
(Get-Content Text.txt) | ForEach-Object { $_ -replace $2, "`nb" } | Set-Content EditedText.txt

我想这就是你想做的

(Get-Content -Path Text.txt -Raw).Replace($1, "'na").Replace($2, "'nb") | Out-File EditedText.txt

-Raw标志将返回一个string对象而不是string[],并且.Replace(valueToReplace,newValue)方法是string类的一部分。最后,输出文件将其输出到一个新文件。如果要将其附加到现有文件,请使用Out file命令上的-append开关。否则,如果文件存在,它只会覆盖该文件。

您的问题不清楚,您想保存什么,匹配模式的行匹配模式还是替换?请拿起并阅读。我有一个文本文件,我想在这个文本文件中搜索一个特定的字符串,我想用“X”替换该字符串,然后将替换内容保存到另一个文件中替换内容是
X
只需保存
X
,您就完成了;-)。说真的:你还不清楚。该问题需要包含更多信息。请阅读,值得一提的是,PowerShell从不保留输入文件编码,如果不使用
-encoding
,则使用
输出文件
,将导致Windows PowerShell中出现“Unicode”(UTF-16LE)文件,这可能是不需要的<代码>设置内容默认为活动的ANSI代码页<代码>设置内容通常是保存已经是字符串的输入的(稍微)更有效的选择。(在PowerShell Core中,一致的默认编码是不带BOM的UTF-8)。替换有时会跳过一些替换。最初的文本是“abcda”,最后的文本是“acda”,有没有办法解决这个问题。@DasBoss我相信。Replace()区分大小写。这就是问题所在吗?不过,它不应该跳过任何内容。顺便说一下,通常你不希望有密码解密机制。您只需每次加密纯文本,并将其与保存的加密密码进行比较。基本上,密码散列是我们讨论的内容。除非你有理由使用纯文本密码,否则我甚至不会担心解密它。@PatrickMcvay我担心的跳过现在不见了,是加密脚本出错了,但不明显。