Set-Content

写入新内容或替换文件中的现有内容。

语法

Set-Content
   [-Path] <string[]>
   [-Value] <Object[]>
   [-PassThru]
   [-Filter <string>]
   [-Include <string[]>]
   [-Exclude <string[]>]
   [-Force]
   [-Credential <pscredential>]
   [-WhatIf]
   [-Confirm]
   [-NoNewline]
   [-Encoding <Encoding>]
   [-AsByteStream]
   [-Stream <string>]
   [<CommonParameters>]
Set-Content
   [-Value] <Object[]>
   -LiteralPath <string[]>
   [-PassThru]
   [-Filter <string>]
   [-Include <string[]>]
   [-Exclude <string[]>]
   [-Force]
   [-Credential <pscredential>]
   [-WhatIf]
   [-Confirm]
   [-NoNewline]
   [-Encoding <Encoding>]
   [-AsByteStream]
   [-Stream <string>]
   [<CommonParameters>]

说明

Set-Content 是一个字符串处理 cmdlet,用于写入新内容或替换文件中的内容。 Set-Content 替换现有内容,不同于 Add-Content 将内容追加到文件的 cmdlet。 若要向你发送内容 Set-Content ,可以使用命令行上的 Value 参数或通过管道发送内容。

如果需要为以下示例创建文件或目录,请参阅 “新建项”。

示例

示例 1:替换目录中多个文件的内容

本示例替换当前目录中多个文件的内容。

Get-ChildItem -Path .\Test*.txt

Test1.txt
Test2.txt
Test3.txt

Set-Content -Path .\Test*.txt -Value 'Hello, World'
Get-Content -Path .\Test*.txt

Hello, World
Hello, World
Hello, World

Get-ChildItem该 cmdlet 使用 Path 参数列出以当前目录中开头Test* 的.txt文件。 cmdlet Set-Content 使用 Path 参数来指定 Test*.txt 文件。 Value 参数提供文本字符串 Hello, World,用于替换每个文件中的现有内容。 Get-Content该 cmdlet 使用 Path 参数来指定Test*.txt文件并在 PowerShell 控制台中显示每个文件的内容。

示例 2:创建新文件和写入内容

本示例创建一个新文件,并将当前日期和时间写入文件。

Set-Content -Path .\DateTime.txt -Value (Get-Date)
Get-Content -Path .\DateTime.txt

1/30/2019 09:55:08

Set-Content 使用 PathValue 参数在当前目录中创建名为 DateTime.txt 的新文件。 Value 参数用于Get-Date获取当前日期和时间。 Set-ContentDateTime 对象作为字符串写入文件。 该 Get-Content cmdlet 使用 Path 参数在 PowerShell 控制台中显示 DateTime.txt 的内容。

示例 3:在文件中替换文本

此命令替换现有文件中单词的所有实例。

Get-Content -Path .\Notice.txt

Warning
Replace Warning with a new word.
The word Warning was replaced.

(Get-Content -Path .\Notice.txt) |
    ForEach-Object {$_ -Replace 'Warning', 'Caution'} |
        Set-Content -Path .\Notice.txt
Get-Content -Path .\Notice.txt

Caution
Replace Caution with a new word.
The word Caution was replaced.

Get-Content cmdlet 使用 Path 参数在当前目录中指定Notice.txt文件。 该 Get-Content 命令用括号包装,以便命令在管道下发送之前完成。

Notice.txt文件的内容将向下ForEach-Object发送到 cmdlet。 ForEach-Object使用自动变量$_,并将警告的每个匹配项替换为警告。 对象将向下 Set-Content 发送到 cmdlet。 Set-Content 使用 Path 参数指定 Notice.txt 文件并将更新的内容写入文件。

最后 Get-Content 一个 cmdlet 在 PowerShell 控制台中显示更新的文件内容。

示例 4:将筛选器与Set-Content配合使用

可以指定 cmdlet 的 Set-Content 筛选器。 使用筛选器限定 Path 参数时,需要包含尾随星号 () * 来指示路径的内容。

以下命令将目录中的内容全部 *.txt 设置为 C:\Temp

Set-Content -Path C:\Temp\* -Filter *.txt -Value "Empty"

参数

-AsByteStream

指定应将内容写入为字节流。 此参数是在 PowerShell 6.0 中引入的。

AsByteStream 参数与 编码 参数一起使用时,会出现警告。 AsByteStream 参数忽略任何编码,输出将写入为字节流。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Confirm

提示你在运行 cmdlet 之前进行确认。

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Credential

注意

任何随 PowerShell 一起安装的提供程序都不支持此参数。 若要模拟其他用户,或在运行此 cmdlet 时提升凭据,请使用 Invoke-Command

Type:PSCredential
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-Encoding

指定目标文件的编码类型。 默认值为 utf8NoBOM

编码是 FileSystem 提供程序添加到 Set-Content的动态参数。 此参数仅在文件系统驱动器中有效。

此参数的可接受值如下所示:

  • ascii:对 ASCII (7 位) 字符集使用编码。
  • bigendianunicode:使用 big-endian 字节顺序以 UTF-16 格式进行编码。
  • bigendianutf32:使用 big-endian 字节顺序以 UTF-32 格式进行编码。
  • oem:对 MS-DOS 和控制台程序使用默认编码。
  • unicode:使用小端字节顺序以 UTF-16 格式进行编码。
  • utf7:采用 UTF-7 格式编码。
  • utf8:采用 UTF-8 格式编码。
  • utf8BOM:使用字节顺序标记 (BOM) 编码 UTF-8 格式
  • utf8NoBOM:不带字节顺序标记的 UTF-8 格式编码 (BOM)
  • utf32:采用 UTF-32 格式编码。

从 PowerShell 6.2 开始, 编码 参数还允许注册代码页的数值 ID (如 -Encoding 1251) 或注册代码页的字符串名称 (,如 -Encoding "windows-1251") 。 有关详细信息,请参阅 Encoding.CodePage 的 .NET 文档。

注意

不再建议使用 UTF-7* 。 从 PowerShell 7.1 起,如果为编码参数指定utf7,则会编写警告。

Type:Encoding
Accepted values:ASCII, BigEndianUnicode, BigEndianUTF32, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
Position:Named
Default value:UTF8NoBOM
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Exclude

指定此 cmdlet 在操作中排除的项目或项作为字符串数组。 此参数值使 Path 参数有效。 请输入路径元素或模式,例如 *.txt。 允许使用通配符。 当命令包含项的内容(例如C:\Windows\*,通配符指定目录的内容C:\Windows)时,Exclude 参数才有效。

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-Filter

指定用于限定 Path 参数的筛选器。 FileSystem 提供程序是唯一支持使用筛选器的已安装 PowerShell 提供程序。 可以在 about_Wildcards 中找到 FileSystem 筛选器语言的语法。 筛选器比其他参数更有效,因为提供程序在 cmdlet 获取对象时应用它们,而不是在检索对象后让 PowerShell 筛选对象。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-Force

强制该 cmdlet 设置文件内容(即使该文件是只读的)。 不同提供程序有不同的实现。 有关详细信息,请参阅 about_ProvidersForce 参数不会替代安全限制。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Include

指定此 cmdlet 将在操作中包含的一个项或多个项(作为一个字符串数组)。 此参数值使 Path 参数有效。 请输入路径元素或模式,例如 "*.txt"。 允许使用通配符。 当命令包含项的内容(例如C:\Windows\*,通配符指定目录的内容C:\Windows)时,Include 参数才有效。

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-LiteralPath

指定一个或多个位置的路径。 文本路径的值与键入的完全一样使用。 不会将任何字符解释为通配符。 如果路径包括转义符,请将其括在单引号中。 单引号告知 PowerShell 不要将任何字符解释为转义序列。

有关详细信息,请参阅 about_Quoting_Rules

Type:String[]
Aliases:PSPath, LP
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-NoNewline

输入对象的字符串表示形式串联成输出。 输出字符串之间不会插入空格或换行符。 最后一个输出字符串之后不会添加换行符。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-PassThru

返回一个表示内容的对象。 默认情况下,此 cmdlet 将不产生任何输出。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Path

指定接受内容的项的路径。 允许使用通配符。

Type:String[]
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:True

-Stream

注意

此参数仅在 Windows 上可用。

指定内容的备用数据流。 如果该流不存在,则此 cmdlet 将创建它。 不支持通配符。

StreamFileSystem 提供程序添加到 Set-Content的动态参数。 此参数仅在文件系统驱动器中有效。

可以使用 Set-Content cmdlet 创建或更新任何备用数据流的内容,例如 Zone.Identifier。 但是,若要取消安全检查(该安全检查可阻止从 Internet 下载的文件),则不建议使用此方法。 如果验证下载的文件是否安全,请使用 Unblock-File cmdlet。

此参数是在 PowerShell 3.0 中引入的。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Value

为项指定新的内容。

Type:Object[]
Position:1
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-WhatIf

显示在此 cmdlet 运行的情况下将会发生什么。 此 cmdlet 未运行。

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

输入

Object

可以通过管道传递包含项 Set-Content的新值的对象。

输出

None or System.String

使用 PassThru 参数时, Set-Content 生成一个表示内容的 System.String 对象。 否则,此 cmdlet 将不生成任何输出。

备注

  • 还可以通过内置别名sc来引用Set-Content它。 有关详细信息,请参阅 about_Aliases
  • Set-Content 专为字符串处理而设计。 如果将非字符串对象 Set-Content传递给该对象,则会在写入对象之前将对象转换为字符串。 若要将对象写入文件,请使用 Out-File
  • Set-Content cmdlet 旨在处理任何提供程序公开的数据。 若要列出会话中可用的提供程序,请键入 Get-PsProvider。 有关详细信息,请参阅 about_Providers