直接操作專案
您在 PowerShell 磁碟驅動器中看到的專案,例如檔案和資料夾或登錄機碼,稱為 PowerShell 中的專案 。 使用它們的 Cmdlet 名稱中有名詞 Item 。
命令的 Get-Command -Noun Item
輸出會顯示有九個 PowerShell 專案 Cmdlet。
Get-Command -Noun Item
CommandType Name Definition
----------- ---- ----------
Cmdlet Clear-Item Clear-Item [-Path] <String[]...
Cmdlet Copy-Item Copy-Item [-Path] <String[]>...
Cmdlet Get-Item Get-Item [-Path] <String[]> ...
Cmdlet Invoke-Item Invoke-Item [-Path] <String[...
Cmdlet Move-Item Move-Item [-Path] <String[]>...
Cmdlet New-Item New-Item [-Path] <String[]> ...
Cmdlet Remove-Item Remove-Item [-Path] <String[...
Cmdlet Rename-Item Rename-Item [-Path] <String>...
Cmdlet Set-Item Set-Item [-Path] <String[]> ...
建立新專案
若要在文件系統中建立新專案,請使用 New-Item
Cmdlet。 包含路徑為 專案的Path參數,以及值為或directory
的 file
ItemType參數。
例如,若要在 C:\Temp
目錄中建立名為 New.Directory
的新目錄,請輸入:
New-Item -Path c:\temp\New.Directory -ItemType Directory
Directory: Microsoft.PowerShell.Core\FileSystem::C:\temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2006-05-18 11:29 AM New.Directory
若要建立檔案,請將 ItemType 參數的值變更為 file
。 例如,若要在目錄中建立名為 file1.txt
的 New.Directory
檔案,請輸入:
New-Item -Path C:\temp\New.Directory\file1.txt -ItemType file
Directory: Microsoft.PowerShell.Core\FileSystem::C:\temp\New.Directory
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2006-05-18 11:44 AM 0 file1
您可以使用相同的技術來建立新的登錄機碼。 事實上,登錄機碼更容易建立,因為 Windows 登錄中唯一的項目類型是機碼。 (登錄項目是項目 屬性。)例如,若要在子機碼中建立名為 _Test
的 CurrentVersion
密鑰,請輸入:
New-Item -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\_Test
Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
SKC VC Name Property
--- -- ---- --------
0 0 _Test {}
輸入登錄路徑時,請務必在PowerShell磁碟驅動器名稱和 HKLM:
HKCU:
中包含冒號 (:
)。 如果沒有冒號,PowerShell 就無法辨識路徑中的磁碟驅動器名稱。
為什麼登錄值不是專案
當您使用 Get-ChildItem
Cmdlet 尋找登錄機碼中的專案時,您將永遠不會看到實際的登錄專案或其值。
例如,登錄機碼 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
通常包含數個登錄專案,代表系統啟動時執行的應用程式。
不過,當您使用 Get-ChildItem
來尋找索引鍵中的子專案時,您只會看到 OptionalComponents
索引鍵的子機碼:
Get-ChildItem HKLM:\Software\Microsoft\Windows\CurrentVersion\Run
Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
SKC VC Name Property
--- -- ---- --------
3 0 OptionalComponents {}
雖然將登錄專案視為專案會很方便,但您無法以確保其唯一的方式指定登錄項目的路徑。 路徑表示法不會區分名為 Run 的登錄子機碼和 [執行] 子機碼中的 [預設] 登錄專案。
此外,因為登錄專案名稱可以包含反斜杠字元 (\
),如果登錄專案是專案,則您無法使用路徑表示法來區分名為 Windows\CurrentVersion\Run
的登錄專案與位於該路徑中的子機碼。
重新命名現有的專案
若要變更檔案或資料夾的名稱,請使用 Rename-Item
Cmdlet。 下列命令會將 file1.txt
檔案名變更為 fileOne.txt
。
Rename-Item -Path C:\temp\New.Directory\file1.txt fileOne.txt
Cmdlet Rename-Item
可以變更檔案或資料夾的名稱,但無法移動專案。 下列命令失敗,因為它會嘗試將檔案從 New.Directory
目錄移至 Temp 目錄。
Rename-Item -Path C:\temp\New.Directory\fileOne.txt c:\temp\fileOne.txt
Rename-Item : can't rename because the target specified isn't a path.
At line:1 char:12
+ Rename-Item <<<< -Path C:\temp\New.Directory\fileOne c:\temp\fileOne.txt
移動專案
若要移動檔案或資料夾,請使用 Move-Item
Cmdlet。
例如,下列命令會將 New.Directory 目錄從 C:\temp
目錄移至磁碟驅動器的 C:
根目錄。 若要確認專案已移動,請包含 Cmdlet 的 Move-Item
PassThru 參數。 如果沒有 PassThru,CmdletMove-Item
就不會顯示任何結果。
Move-Item -Path C:\temp\New.Directory -Destination C:\ -PassThru
Directory: Microsoft.PowerShell.Core\FileSystem::C:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2006-05-18 12:14 PM New.Directory
複製專案
如果您熟悉其他殼層中的複製作業,您可能會發現PowerShell中的 Cmdlet 行為 Copy-Item
異常。 當您將專案從某個位置複製到另一個位置時, Copy-Item
預設不會複製其內容。
例如,如果您從 C: 磁碟驅動器C:\temp
將目錄複製到New.Directory
目錄,命令會成功,但不會複製 New.Directory 目錄中的檔案。
Copy-Item -Path C:\New.Directory -Destination C:\temp
如果您顯示 的內容 C:\temp\New.Directory
,您會發現它不包含任何檔案:
PS> Get-ChildItem -Path C:\temp\New.Directory
PS>
為什麼 Cmdlet 不會 Copy-Item
將內容複製到新位置?
Cmdlet Copy-Item
是設計成一般;它不只是用來複製檔案和資料夾。
此外,即使複製檔案和資料夾,您可能只想複製容器,而不是其中的專案。
若要複製資料夾的所有內容,請在 命令中包含 Cmdlet 的 Copy-Item
Recurse 參數。 如果您已經複製目錄而沒有其內容,請新增 Force 參數,這可讓您覆寫空的資料夾。
Copy-Item -Path C:\New.Directory -Destination C:\temp -Recurse -Force -PassThru
Directory: Microsoft.PowerShell.Core\FileSystem::C:\temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2006-05-18 1:53 PM New.Directory
Directory: Microsoft.PowerShell.Core\FileSystem::C:\temp\New.Directory
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2006-05-18 11:44 AM 0 file1
刪除專案
若要刪除檔案和資料夾,請使用 Remove-Item
Cmdlet。 PowerShell Cmdlet,例如 Remove-Item
,在輸入其命令時,可能會進行重大、不可復原的變更,通常會提示您進行確認。 例如,如果您嘗試移除 New.Directory
資料夾,系統會提示您確認命令,因為資料夾包含檔案:
Remove-Item C:\temp\New.Directory
Confirm
The item at C:\temp\New.Directory has children and the -recurse parameter was not
specified. If you continue, all children will be removed with the item. Are you
sure you want to continue?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help
(default is "Y"):
因為 Yes
是預設回應,若要刪除資料夾及其檔案,請按 Enter 鍵。 若要移除資料夾而不需確認,請使用 Recurse 參數。
Remove-Item C:\temp\New.Directory -Recurse
執行專案
PowerShell 會 Invoke-Item
使用 Cmdlet 來執行檔案或資料夾的預設動作。 這個預設動作是由登錄中的默認應用程式處理程式所決定;效果與按兩下 檔案總管中的專案相同。
例如,假設您執行下列命令:
Invoke-Item C:\WINDOWS
位於 的 C:\Windows
[總管] 視窗隨即出現,就像您按兩下 C:\Windows
資料夾一樣。
如果您在 Windows Vista 之前叫用系統上的 Boot.ini
檔案:
Invoke-Item C:\boot.ini
.ini
如果文件類型與 記事本 相關聯,檔案會在 boot.ini
記事本 中開啟。