Set-Content
寫入或使用新內容取代項目中的內容。
語法
Set-Content [-LiteralPath] <string[]> [-Value] <Object[]> [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]
Set-Content [-Path] <string[]> [-Value] <Object[]> [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-PassThru] [-Confirm] [-WhatIf] [-UseTransaction] [<CommonParameters>]
描述
Set-Content Cmdlet 是可在指定之項目 (例如檔案) 中寫入或取代其中內容的字串處理 Cmdlet。而 Add-Content Cmdlet 會將內容附加到檔案,Set-Content 則是取代現有的內容。您可以在命令中輸入內容,或是透過管線將內容傳送到 Set-Content。
參數
-Credential <PSCredential>
指定具有執行此動作之權限的使用者帳戶。預設為目前使用者。
請輸入使用者名稱,例如 "User01" 或 "Domain01\User01",或是輸入 PSCredential 物件,例如由 Get-Credential Cmdlet 所產生的物件。如果輸入使用者名稱,將會提示您提供密碼。
所有隨 Windows PowerShell 安裝的提供者都不支援此參數
必要? |
false |
位置? |
named |
預設值 |
|
接受管線輸入? |
true (ByPropertyName) |
接受萬用字元? |
false |
-Exclude <string[]>
忽略指定的項目。此參數的值用於限定 Path 參數。輸入路徑元素或模式,例如 "*.txt"。允許使用萬用字元。
必要? |
false |
位置? |
named |
預設值 |
|
接受管線輸入? |
false |
接受萬用字元? |
false |
-Filter <string>
指定以提供者的格式或語言表示的篩選器。此參數的值用於限定 Path 參數。篩選器的語法 (包括萬用字元的用法) 依提供者而定。篩選器比其他參數更有效率,因為提供者會在擷取物件時套用篩選器,而非等到 Windows PowerShell 擷取物件後才進行篩選。
必要? |
false |
位置? |
named |
預設值 |
|
接受管線輸入? |
false |
接受萬用字元? |
false |
-Force
允許此 Cmdlet 設定檔案內容,即使檔案是唯讀的亦然。實作因提供者而異。如需詳細資訊,請參閱 about_Providers。即便使用 Force 參數,此 Cmdlet 也無法覆寫安全性限制。
必要? |
false |
位置? |
named |
預設值 |
|
接受管線輸入? |
false |
接受萬用字元? |
false |
-Include <string[]>
只變更指定的項目。此參數的值用於限定 Path 參數。輸入路徑元素或模式,例如 "*.txt"。允許使用萬用字元。
必要? |
false |
位置? |
named |
預設值 |
|
接受管線輸入? |
false |
接受萬用字元? |
false |
-LiteralPath <string[]>
指定要接收內容的項目所在路徑。LiteralPath 與 Path 不同,係取用實際輸入的內容做為參數值。任何字元均不被解譯成萬用字元。如果路徑中包含逸出字元,請將其置於單引號內。單引號係告訴 Windows PowerShell 不要將任何字元解譯成逸出序列。
必要? |
true |
位置? |
1 |
預設值 |
|
接受管線輸入? |
true (ByPropertyName) |
接受萬用字元? |
false |
-PassThru
傳回代表內容的物件。根據預設,此 Cmdlet 不會產生任何輸出。
必要? |
false |
位置? |
named |
預設值 |
|
接受管線輸入? |
false |
接受萬用字元? |
false |
-Path <string[]>
指定要接收內容的項目所在路徑。允許使用萬用字元。
必要? |
true |
位置? |
1 |
預設值 |
|
接受管線輸入? |
true (ByPropertyName) |
接受萬用字元? |
false |
-Value <Object[]>
指定項目的新內容。
必要? |
true |
位置? |
2 |
預設值 |
|
接受管線輸入? |
true (ByValue, ByPropertyName) |
接受萬用字元? |
false |
-Confirm
在執行命令前先提示確認。
必要? |
false |
位置? |
named |
預設值 |
|
接受管線輸入? |
false |
接受萬用字元? |
false |
-WhatIf
說明執行命令時將會發生何種情況,但不會實際執行命令。
必要? |
false |
位置? |
named |
預設值 |
|
接受管線輸入? |
false |
接受萬用字元? |
false |
-UseTransaction
將命令加入現用交易中。此參數只有當交易進行中時才有效。如需詳細資訊,請參閱 about_Transactions。
必要? |
false |
位置? |
named |
預設值 |
|
接受管線輸入? |
false |
接受萬用字元? |
false |
<CommonParameters>
這個 Cmdlet 支援一般參數:-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。如需詳細資訊,請參閱 about_Commonparameters.
輸入和輸出
輸入型別是可經由管道輸出至 Cmdlet 的物件型別。傳回型別則是 Cmdlet 所傳回的物件型別。
輸入 |
System.Object 您可以經由管道將包含此項目新值的物件輸出至 Set-Content。 |
輸出 |
無或 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。
範例 1
C:\PS>set-content -path C:\Test1\test*.txt -value "Hello, World"
描述
-----------
這個命令會將 Test1 目錄中所有檔名開頭為 "test" 之檔案的內容取代成 "Hello, World"。這個範例會示範如何透過在命令中輸入的方式來指定內容。
範例 2
C:\PS>get-date | set-content C:\Test1\date.csv
描述
-----------
這個命令會建立僅包含目前日期和時間之以逗號分隔的變數長度 (csv) 檔案。它會使用 Get-Date Cmdlet 取得目前的系統日期和時間。管線運算子會將結果傳遞到 Set-Content,並由其建立檔案和寫入其中內容。
如果 Test1 目錄不存在,此命令將會失敗;但是如果檔案不存在,此命令會建立此檔案。
範例 3
C:\PS>(get-content Notice.txt) | foreach-object {$_ -replace "Warning", "Caution"} | set-content Notice.txt
描述
-----------
這個命令會將 Notice.txt 檔案中的所有 "Warning" 例項取代成 "Caution"。
它使用 Get-Content Cmdlet 取得 Notice.txt 的內容。管線運算子會將結果傳遞到 ForEach-Object Cmdlet,該 Cmdlet 會將運算式套用到 Get-Content 中的每一行內容。此運算式會用 "$_" 符號參照到目前項目,並使用 Replace 參數指定要被取代的文字。
另一個管線運算子會將變更的內容傳送到 Set-Content,並由其將 Notice.txt 的文字取代成新內容。
Get-Content 命令外面的括號可以確保先完成 Get 作業後,才開始進行 Set 作業。否則,此命令將會失敗,因為這兩個函數將會嘗試存取相同檔案。