使用 PowerShell 替换文件中的文本
-
在 PowerShell 中使用
Get-Content
和Set-Content
替换文件中每个出现的字符串 -
在 PowerShell 中使用
File
类替换文件中每个出现的字符串 - 使用 PowerShell 替换多个文件中每个出现的字符串
PowerShell 是一个强大的工具,可以执行不同的文件和文件夹操作。它允许你创建、复制、删除、移动、重命名和查看系统上的文件和文件夹。
PowerShell 有一些有用的 cmdlet,可以读取、写入和替换文件中的内容。本教程将介绍使用 PowerShell 替换文件中出现的每个字符串的不同方法。
在 PowerShell 中使用 Get-Content
和 Set-Content
替换文件中每个出现的字符串
Get-Content
获取指定路径中的项目内容,例如文件中的文本。Set-Content
是一个字符串处理 cmdlet,允许你编写新内容或替换文件中的现有内容。
你可以使用 Get-Content
和 Set-Content
cmdlet 替换文件中出现的每个字符串。我们在目录 (C:\New
) 中有一个文本文件 (test.txt
),其内容如下。
Get-Content C:\New\test.txt
输出:
Welcome to Linux tutorials.
Linux is free.
Linux is powerful.
现在,让我们借助 -Replace
参数在 test.txt
文件中用 PowerShell
替换字符串 Linux
的所有出现。Get-Content
周围需要括号 ()
。
(Get-Content C:\New\test.txt) -Replace 'Linux', 'PowerShell' | Set-Content C:\New\test.txt
然后查看 test.txt
文件的内容以验证更改。
Get-Content C:\New\test.txt
如你所见,Linux
已成功替换为 PowerShell
。
输出:
Welcome to PowerShell tutorials.
PowerShell is free.
PowerShell is powerful.
此方法使用字符串数组来查找和替换文件中的字符串,因为 Get-Content
cmdlet 返回一个数组。如果 Get-Content
返回单个字符串,则更容易替换字符串。
你可以使用 -Raw
参数,如下所示。
(Get-Content C:\New\test.txt -Raw) -Replace 'Linux', 'PowerShell' | Set-Content C:\New\test.txt
在 PowerShell 中使用 File
类替换文件中每个出现的字符串
File
类为常见操作提供静态方法,例如创建、复制、移动、打开、删除和附加到单个文件。使用 File
类的 Replace()
方法替换指定文件的内容。
Get-Content C:\New\python.txt
Find the best Python tutorials and learn Python easily from DelftStack.
这是一个使用 File
类方法替换文件中每次出现的字符串的示例。
$string = [System.IO.File]::ReadAllText("C:\New\python.txt").Replace("Python","JavaScript")
[System.IO.File]::WriteAllText("C:\New\python.txt", $string)
ReadAllText()
方法打开一个文本文件,读取该文件中的所有文本,然后关闭该文件。
WriteAllText()
方法创建一个新文件,将特定字符串写入文件,然后关闭文件。如果目标文件已存在于该位置,则会被覆盖。
验证在 C:\New\python.txt
中所做的更改。
Get-Content C:\New\python.txt
输出:
Find the best JavaScript tutorials and learn JavaScript easily from DelftStack.
使用 PowerShell 替换多个文件中每个出现的字符串
上述方法替换单个文件中的字符串;有时,你可能需要替换多个文件中的相同字符串。在这种情况下,你可以使用以下命令替换多个文件中每次出现的指定字符串。
Get-ChildItem 'C:\New\*.txt' | ForEach {
(Get-Content $_) | ForEach {$_ -Replace 'weekly', 'monthly'} | Set-Content $_
}
Get-ChildItem
cmdlet 获取指定目录 C:\New
中的文件。星号 *
通配符指定所有文件扩展名为 .txt
的文件。
在 ForEach
循环中,你可以对数组中的每个项目运行一个或多个命令。
你可以使用 -Recurse
参数替换指定目录及其子目录中文件中的字符串。
Get-ChildItem 'C:\New\*.txt' -Recurse | ForEach {
(Get-Content $_) | ForEach {$_ -Replace 'weekly', 'monthly'} | Set-Content $_
}