ZetCode

PowerShell Set-Content

最后修改:2025 年 2 月 15 日

在本文中,我们将介绍 PowerShell 中的 Set-Content cmdlet。此 cmdlet 将内容写入文件,替换现有内容。它对于以编程方式创建或更新文本文件非常有用。

Set-Content 基础知识

Set-Content cmdlet 写入新内容或替换文件中的内容。它与 Add-Content(后者附加内容)不同。默认情况下,它使用 Unicode (UTF-16LE) 编码。您可以使用 -Encoding 参数指定不同的编码。

Set-Content 的基本用法

使用 Set-Content 的最简单方法是提供文件路径和内容。这将创建一个新文件或覆盖一个现有文件。内容可以是字符串或字符串数组。数组中的每个元素都成为文件中的一行。

setcontent1.ps1
Set-Content -Path "example.txt" -Value "Hello, PowerShell!"

此命令将 "Hello, PowerShell!" 创建或覆盖到 example.txt。如果文件存在,则所有先前的内容都将被替换。如果未指定完整路径,则文件将在当前目录中创建。

向文件写入多行

您可以通过将字符串数组传递给 -Value 来写入多行。数组中的每个元素都成为输出文件中的单独一行。这对于创建结构化文本文件或配置文件很有用。

setcontent2.ps1
$content = @("First line", "Second line", "Third line")
Set-Content -Path "multiline.txt" -Value $content

这会创建 multiline.txt,其中包含三行。@() 语法创建了一个数组。数组中的每个字符串都成为输出文件中的一行。

PS C:\> Get-Content multiline.txt
First line
Second line
Third line

使用管道输入

Set-Content 可以接受来自管道的输入。这允许您在一个命令中处理数据并将其写入文件。管道输入被视为要写入的内容。当与其他 cmdlet 结合使用时,这非常强大。

setcontent3.ps1
Get-Process | Out-String | Set-Content -Path "processes.txt"

此命令获取所有正在运行的进程,将它们转换为字符串,并将它们写入 processes.txt。Out-String cmdlet 将进程对象转换为文本格式。该文件包含您在控制台中看到的相同输出。

指定文件编码

默认情况下,Set-Content 使用 Unicode 编码。您可以使用 -Encoding 参数指定不同的编码。常见选项包括 UTF8、ASCII 和 UTF32。这对于与其他系统的兼容性很重要。

setcontent4.ps1
Set-Content -Path "utf8file.txt" -Value "UTF-8 encoded text" -Encoding UTF8

这会创建一个使用 UTF-8 编码而不是默认 Unicode 的文件。-Encoding 参数确保文件使用指定的字符编码。这在处理期望特定编码的系统时至关重要。

使用 -NoNewline 参数

-NoNewline 参数可防止 Set-Content 在文件末尾添加换行符。默认情况下,它会添加一个换行符。当您需要精确控制文件内容时,这很有用。

setcontent5.ps1
Set-Content -Path "nonewline.txt" -Value "No newline here" -NoNewline

这会创建一个不带尾随换行符的文件。文件恰好包含指定的字符串。这对于某些文件格式或在连接文件时可能很重要。

有条件地设置文件内容

您可以使用 -WhatIf 和 -Confirm 参数进行安全的文件操作。-WhatIf 显示在不进行更改的情况下会发生什么。-Confirm 在覆盖文件之前提示。这些对于修改文件的脚本很有用。

setcontent6.ps1
Set-Content -Path "important.txt" -Value "New data" -WhatIf

这显示了在不实际修改文件的情况下会发生什么。输出表明文件将被更新。删除 -WhatIf 以实际进行更改。

PS C:\> .\setcontent6.ps1
What if: Performing the operation "Set Content" on target "Path: C:\important.txt".

使用 -Force 覆盖只读文件

-Force 参数允许 Set-Content 覆盖只读文件。通常,它在尝试修改只读文件时会失败。这会暂时绕过只读属性。

setcontent7.ps1
Set-Content -Path "readonly.txt" -Value "New content" -Force

此命令更新 readonly.txt,即使它设置了只读属性。-Force 参数对于修改受保护的文件是必需的。请谨慎使用,因为它会覆盖文件保护。

来源

PowerShell Set-Content 文档

在本文中,我们介绍了 PowerShell 中的 Set-Content cmdlet。

作者

我的名字是 Jan Bodnar,我是一名热情的程序员,拥有丰富的编程经验。我自 2007 年以来一直撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出 所有 PowerShell 教程