Set-Content

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

语法

Path (Default) - FileSystem provider

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>]

LiteralPath - FileSystem provider

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>]

Path (Default) - All providers

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

LiteralPath - All providers

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

说明

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

如果需要为以下示例创建文件或目录,请参阅 New-Item

示例

示例 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* 文件。 Set-Content cmdlet 使用 Path 参数来指定 Test*.txt 文件。 Value 参数提供替换每个文件中现有内容的文本字符串 Hello, WorldGet-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 配合使用

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

以下命令将 *.txt 目录中所有 C:\Temp 文件的内容设置为空

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

参数

-AsByteStream

这是 FileSystem 提供程序提供的动态参数。 有关详细信息,请参阅 about_FileSystem_Provider

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

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

参数属性

类型:SwitchParameter
默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-Confirm

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

参数属性

类型:SwitchParameter
默认值:False
支持通配符:False
不显示:False
别名:cf

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-Credential

注释

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

参数属性

类型:PSCredential
默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):True
来自剩余参数的值:False

-Encoding

这是 FileSystem 提供程序提供的动态参数。 有关详细信息,请参阅 about_FileSystem_Provider

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

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

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

  • ascii:对 ASCII(7 位)字符集使用编码。
  • ansi:对当前区域性的 ANSI 代码页使用编码。 此选项已在 PowerShell 7.4 中添加。
  • bigendianunicode:使用大端字节序以 UTF-16 格式进行编码。
  • bigendianutf32:使用大端字节顺序以 UTF-32 格式进行编码。
  • oem:对 MS-DOS 和控制台程序使用默认编码。
  • unicode:使用小端字节序以 UTF-16 格式进行编码。
  • utf7:采用 UTF-7 格式编码。
  • utf8:采用 UTF-8 格式编码。
  • utf8BOM:以 UTF-8 格式编码并附加字节顺序标记(BOM)
  • utf8NoBOM:采用不带字节顺序标记(BOM)的 UTF-8 格式进行编码。
  • utf32:采用 UTF-32 格式编码。

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

从 PowerShell 7.4 开始,可以使用 Ansi 参数的 值来传递当前区域性 ANSI 代码页的数字 ID,而无需手动指定它。

注释

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

参数属性

类型:Encoding
默认值:utf8NoBOM
接受的值:ASCII, BigEndianUnicode, BigEndianUTF32, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-Exclude

指定一个或多个在操作中被此 cmdlet 排除的项目,以字符串数组的形式表示。 此参数的值定义了 Path 参数的限定条件。 输入路径元素或模式,例如 *.txt。 允许使用通配符。 仅当命令包含项(如 )的内容(其中通配符指定 C:\Windows\* 目录的内容)时,C:\Windows 参数才有效。

参数属性

类型:

String[]

默认值:None
支持通配符:True
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-Filter

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

参数属性

类型:String
默认值:None
支持通配符:True
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-Force

强制 cmdlet 设置文件的内容,即使文件是只读的。 实现因服务提供商而异。 有关详细信息,请参阅 about_ProvidersForce 参数不会替代安全限制。

参数属性

类型:SwitchParameter
默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-Include

指定一个或多个此 cmdlet 在操作中包含的项,这些项以字符串数组形式表示。 此参数的值定义了 Path 参数的限定条件。 输入路径元素或模式,例如 "*.txt"。 允许使用通配符。 仅当命令包含某项的内容(例如 ,其中通配符指定 C:\Windows\* 目录的内容)时,C:\Windows 参数才有效。

参数属性

类型:

String[]

默认值:None
支持通配符:True
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-LiteralPath

指定通向一个或多个位置的路径。 LiteralPath 的值严格按照所键入的形式使用。 不会将任何字符解释为通配符。 如果路径包含转义字符,请将它括在单引号中。 单引号告知 PowerShell 不要将任何字符解释为转义序列。

有关详细信息,请参阅 about_Quoting_Rules

参数属性

类型:

String[]

默认值:None
支持通配符:False
不显示:False
别名:PSPath, LP

参数集

LiteralPath
Position:Named
必需:True
来自管道的值:False
来自管道的值(按属性名称):True
来自剩余参数的值:False

-NoNewline

这是 FileSystem 提供程序提供的动态参数。 有关详细信息,请参阅 about_FileSystem_Provider

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

参数属性

类型:SwitchParameter
默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-PassThru

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

参数属性

类型:SwitchParameter
默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-Path

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

参数属性

类型:

String[]

默认值:None
支持通配符:True
不显示:False

参数集

Path
Position:0
必需:True
来自管道的值:False
来自管道的值(按属性名称):True
来自剩余参数的值:False

-Stream

这是 FileSystem 提供程序提供的动态参数。 此参数仅在 Windows 上可用。 有关详细信息,请参阅 about_FileSystem_Provider

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

StreamFileSystem 提供程序添加到 Set-Content的动态参数。 此参数仅适用于文件系统驱动器。

可以使用 Set-Content cmdlet 创建或更新任何备用数据流的内容,例如 Zone.Identifier。 但是,我们不建议这样做,以此消除阻止从 Internet 下载的文件的安全检查。 如果验证下载的文件是否安全,请使用 Unblock-File cmdlet。

此参数是在 PowerShell 3.0 中引入的。 从 PowerShell 7.2 起,Set-Content 可以从目录和文件设置备用数据流的内容。

参数属性

类型:String
默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-Value

指定项的新内容。

参数属性

类型:

Object[]

默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:1
必需:True
来自管道的值:True
来自管道的值(按属性名称):True
来自剩余参数的值:False

-WhatIf

显示 cmdlet 运行时会发生什么情况。 命令脚本未运行。

参数属性

类型:SwitchParameter
默认值:False
支持通配符:False
不显示:False
别名:无线

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

CommonParameters

此 cmdlet 支持通用参数:-Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。 有关详细信息,请参阅 about_CommonParameters

输入

Object

可以通过管道将包含项的新值的对象传递给此 cmdlet。

输出

None

默认情况下,此 cmdlet 不返回任何输出。

String

使用 PassThru 参数时,此 cmdlet 返回表示内容的字符串。

备注

  • Set-Content 专为字符串处理而设计。 如果将非字符串对象通过管道传递给 Set-Content,则会在编写对象之前将该对象转换为字符串。 若要将对象写入文件,请使用 Out-File
  • Set-Content cmdlet 用于处理由任何提供程序公开的数据。 若要列出会话中可用的提供程序,请键入 Get-PSProvider。 有关详细信息,请参阅 about_Providers