使用 PowerShell 替换文件中的文本

Rohan Timalsina 2023年1月30日 2022年5月16日
  1. 在 PowerShell 中使用 Get-ContentSet-Content 替换文件中每个出现的字符串
  2. 在 PowerShell 中使用 File 类替换文件中每个出现的字符串
  3. 使用 PowerShell 替换多个文件中每个出现的字符串
使用 PowerShell 替换文件中的文本

PowerShell 是一个强大的工具,可以执行不同的文件和文件夹操作。它允许你创建、复制、删除、移动、重命名和查看系统上的文件和文件夹。

PowerShell 有一些有用的 cmdlet,可以读取、写入和替换文件中的内容。本教程将介绍使用 PowerShell 替换文件中出现的每个字符串的不同方法。

在 PowerShell 中使用 Get-ContentSet-Content 替换文件中每个出现的字符串

Get-Content 获取指定路径中的项目内容,例如文件中的文本。Set-Content 是一个字符串处理 cmdlet,允许你编写新内容或替换文件中的现有内容。

你可以使用 Get-ContentSet-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 $_
}
Rohan Timalsina avatar Rohan Timalsina avatar

Rohan is a learner, problem solver, and web developer. He loves to write and share his understanding.

LinkedIn Website

相关文章 - PowerShell String