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
的最简单方法是提供文件路径和内容。这将创建一个新文件或覆盖一个现有文件。内容可以是字符串或字符串数组。数组中的每个元素都成为文件中的一行。
Set-Content -Path "example.txt" -Value "Hello, PowerShell!"
此命令将 "Hello, PowerShell!" 创建或覆盖到 example.txt。如果文件存在,则所有先前的内容都将被替换。如果未指定完整路径,则文件将在当前目录中创建。
向文件写入多行
您可以通过将字符串数组传递给 -Value 来写入多行。数组中的每个元素都成为输出文件中的单独一行。这对于创建结构化文本文件或配置文件很有用。
$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 结合使用时,这非常强大。
Get-Process | Out-String | Set-Content -Path "processes.txt"
此命令获取所有正在运行的进程,将它们转换为字符串,并将它们写入 processes.txt。Out-String
cmdlet 将进程对象转换为文本格式。该文件包含您在控制台中看到的相同输出。
指定文件编码
默认情况下,Set-Content
使用 Unicode 编码。您可以使用 -Encoding 参数指定不同的编码。常见选项包括 UTF8、ASCII 和 UTF32。这对于与其他系统的兼容性很重要。
Set-Content -Path "utf8file.txt" -Value "UTF-8 encoded text" -Encoding UTF8
这会创建一个使用 UTF-8 编码而不是默认 Unicode 的文件。-Encoding 参数确保文件使用指定的字符编码。这在处理期望特定编码的系统时至关重要。
使用 -NoNewline 参数
-NoNewline 参数可防止 Set-Content
在文件末尾添加换行符。默认情况下,它会添加一个换行符。当您需要精确控制文件内容时,这很有用。
Set-Content -Path "nonewline.txt" -Value "No newline here" -NoNewline
这会创建一个不带尾随换行符的文件。文件恰好包含指定的字符串。这对于某些文件格式或在连接文件时可能很重要。
有条件地设置文件内容
您可以使用 -WhatIf 和 -Confirm 参数进行安全的文件操作。-WhatIf 显示在不进行更改的情况下会发生什么。-Confirm 在覆盖文件之前提示。这些对于修改文件的脚本很有用。
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
覆盖只读文件。通常,它在尝试修改只读文件时会失败。这会暂时绕过只读属性。
Set-Content -Path "readonly.txt" -Value "New content" -Force
此命令更新 readonly.txt,即使它设置了只读属性。-Force 参数对于修改受保护的文件是必需的。请谨慎使用,因为它会覆盖文件保护。
来源
在本文中,我们介绍了 PowerShell 中的 Set-Content cmdlet。
作者
列出 所有 PowerShell 教程。