PowerShell 更改目录:浏览文件系统

在 Windows 中,更改目錄是文件管理的基本部分,但您願意為您訪問的每個目錄寫下完整路徑嗎?幸運的是,PowerShell 更改目錄命令可以讓您的生活更輕鬆。

在本教程中,您將探索可用於在 PowerShell 中更改目錄的命令,幫助您輕鬆導航您的文件系統。

繼續閱讀,今天就掌握 PowerShell 文件系統導航的基礎知識吧!

先決條件

本教程將進行實踐演示。為了跟上步伐,請確保您的 Windows 系統已安裝了 PowerShell。本教程使用的是 Windows 10 和 PowerShell v7

從一個驅動器切換到另一個

每個存儲設備,如硬盤或 USB 驅動器,都被分配了一個驅動器字母(即 C:D:E:、…Z:)。當您打開 PowerShell 窗口時,默認情況下,提示位於當前驅動器上的用戶配置文件目錄中。

假設您需要經常訪問與當前所在驅動器不同的驅動器上存儲的文件或文件夾。如果是這樣,切換到另一個驅動器就是必要的。

要查看如何從一個驅動器切換到另一個:

1. 打開 PowerShell 並確認提示是否為 C:\Users\admin. 如果是,則您目前位於 C: 驅動器中的 admin 用戶的配置文件目錄,如下所示。

Viewing the default working drive

2. 接下來,打開另一個 PowerShell 會話,但這次以系統管理員身份。

下面,提示開始的默認目錄與以常規用戶身份啟動 PowerShell 時不同。 具體而言,提示開始於當前驅動器(C:)中的 Windows 目錄中的 System32 目錄,如下所示。

這種默認行為防止非管理員用戶意外修改關鍵系統文件或運行敏感工具。

Viewing the default working drive as an admin

3. 執行以下命令來更改當前驅動器為 D:(或任何可用驅動器)。 這種語法是在 PowerShell 中在不同驅動器之間快速導航的一種方法。

D:

使用此方法在 PowerShell 中切換驅動器時,提示會更改為新驅動器的根目錄,如下所示的輸出。

如您所見,無論 PowerShell 開始的默認目錄是什麼,您總是可以切換到另一個驅動器。

Switching to another drive

4. 現在,運行以下命令嘗試切換到 D:\Kitty 目錄(或任何其他子目錄)。

D:\Kitty

你是否遇到了和下面一样的錯誤?這個錯誤是因為你無法一次性切換到子目錄(例如,D:\Kitty)所致。

跳到下一部分查看如何切換到子目錄。

Attempting to switch to subdirectories

通過cd命令導航文件系統

在PowerShell中導航多個子目錄是一個常見的任務。但是,是否有一種快速的方式可以在不同的子目錄之間導航?是的!cd命令,即“更改目錄”,讓您可以快速切換到另一個子目錄,而不管您當前的目錄是什麼。

早些時候,cd命令用於在命令提示符中導航驅動器和目錄之間。微軟使cd命令向後兼容,因此您仍然可以在PowerShell中導航目錄。

繼續閱讀,了解如何使用cd命令導航您的文件系統。

移動到不同驅動器中的目錄

如果您考慮一下,在不同驅動器中的子目錄中跳轉可能會讓您感到困擾。好吧,沒有必要過度思考。您將驚訝地發現cd命令如何快速地讓您跳轉到另一個驅動器,同時進入其中一個目錄。

運行下面的命令以導航到名為Kitty的子目錄,在D:*驅動器中。

cd D:\Kitty
Navigating a subdirectory in another drive

在目錄層次結構中向上移動多個級別

使用文件系統管理,或在項目上工作時,您可能經常需要從當前目錄上移一兩個級別。cd 命令支持 .. 表示法,讓您可以有效地切換到當前目錄的父目錄。

這個功能讓您在文件系統中上移一個級別,而不需要指定父目錄的完整路徑。

1. 在下面運行 cd 命令,後面添加一個空格和 .. 表示法,告訴 PowerShell 在目錄層次結構中上移一個級別。

cd 命令後面加上空格字符是不必要的,因為命令即使沒有空格也能正常工作。但是添加空格是一種常見的做法,可以提高可讀性,並與其他命令保持一致。

cd ..

在下面的輸出中,您可以看到提示從 C:\Users\admin\Documents 上移了一個級別到 C:\Users\admin 目錄。請注意,您無需指定完整路徑就能上移到 C:\Users\admin 目錄。

Moving up one level in the directory hierarchy

2. 與其向上移動一個級別,請運行以下帶有兩個 .. 表示法的命令,並在每個後面加上反斜杠(\)。這樣做可以讓您在目錄層次結構中上移兩個級別。

cd ..\..\

下面,輸出顯示您從 C:\Users\admin\Documents 直接跳到 C:\Users 目錄。

Moving up two levels from the current directory

3. 最後,運行以下命令以移動到當前驅動器的根目錄。

如果您在檔案系統中迷失了方向,這個指令很有用,因為您可以快速跳轉到根目錄。這個指令省去了您多次運行cd ..指令的麻煩。

cd \
Moving up to the root directory

移動到特定子目錄

就像在目錄層次結構中向上移動一級一樣,移動到特定子目錄也是一個快速的任務。由於可能有很多子目錄,添加類似前面的標記(....\)將不起作用,您必須指定子目錄的名稱。

運行下面的命令以進入當前目錄(.)中的一個子目錄(\admin)。

cd .\admin

注意下面您節省了時間和精力,因為您不需要指定完整路徑的C:\Users\admin目錄。

Moving into one of the subdirectories

使用 PowerShell Cmdlets 導航文件系統

儘管cd指令在 PowerShell 中無疑有效,但微軟引入了許多 Cmdlets,如Set-Location,讓您可以在文件系統中導航。

這些 Cmdlets 提供了比cd指令更強大的功能,您可以使用它們在不同驅動器之間切換、導航堆疊位置,並在位置歷史記錄中循環遍歷目錄。

敬請關注,看到 PowerShell Cmdlets 在導航您的文件系統中有多強大。

從不同驅動器設置位置

cd命令一样,Set-Location cmdlet允许您从一个目录跳转到另一个目录并直接导航到其中的一个目录。但由于您正在使用PowerShell cmdlet,您必须添加-Path参数来设置目标位置的路径。

Set-Location cmdlet将当前工作目录设置为指定的位置。指定的位置可以是以下之一:

  • A directory, or subdirectory on the local file system.
  • PowerShell中由提供程序支持的任何其他位置。
  • 或注册表位置。

要查看Set-Location cmdlet在导航文件系统中的工作原理:

运行下面的命令,导航到D:驱动器中-Path参数指定的Kitty目录。

Set-Location -Path "D:\Kitty"
Navigating to a directory in another drive

如果您觉得输入完整的Set-Location cmdlet有点麻烦,您还可以使用其中一个别名,如chdirsl,以导航您的文件系统。别名提供了一种更方便的方式来访问经常使用的命令。

现在,运行下面的命令将工作位置设置为特定的注册表位置。在这种情况下,HKLM:\路径(一种简写)指的是Windows注册表中的HKEY_LOCAL_MACHINE hive。

這個命令將工作位置設定為註冊表中 HKEY_LOCAL_MACHINE hive 的根目錄。通過其他 PowerShell 命令,您可以訪問並修改註冊表的子鍵和值。

Set-Location -Path "HKLM:\”
Setting the working location to a specific registry location

在堆疊位置之間切換(推送和彈出)

快速訪問堆疊位置聽起來很方便。但是可能嗎?是的!Push-LocationPop-Location cmdlet 允許您按後進先出(LIFO)的順序從命名堆疊中推送和彈出位置。

要導航到堆疊的位置,請按照以下步驟進行:

1. 執行下面的 Push-Location 命令,將當前位置推送到名為 Paths 的堆疊,並將 C:\Program Files\PowerShell\ 目錄設置為當前目錄。

Push-Location -Path 'C:\Program Files\PowerShell\' -StackName "Paths"
Pushing the current location to a stack called Paths

2. 接下來,運行下面的命令,將當前位置(C:\Program Files\PowerShell\)推送到同一個 Paths 堆疊的頂部。

Push-Location -Path 'C:\Program Files\WindowsPowerShell\' -StackName "Paths"

3. 運行每個下面的命令,將 Paths 設置為默認堆疊並查看(Get-Location)堆疊的位置。

# 將 Paths 堆疊設置為默認
Set-Location -StackName "Paths"
# 查看默認堆疊中的所有堆疊位置
Get-Location -Stack

以下是您目前堆疊了兩個位置的情況,您最後推送的位置位於頂部。

Viewing stacked locations in the Paths stack

4. 現在,運行以下Pop-Location命令兩次,從默認堆疊中彈出頂部的位置,目前是 Paths 堆疊。

Pop-Location
Changing the current directory by popping stacked locations

請注意,從堆疊中彈出位置會將該位置從堆疊中移除。下面的錯誤表明您已從默認堆疊中彈出所有堆疊的位置。

Attempting to view an empty stack

存儲在變量中的目錄導航

您已經通過不同的方式在文件系統中導航目錄。但是,如果您需要頻繁地訪問特定位置怎麼辦?多次輸入完整路徑或循環查看位置歷史記錄可能很繁瑣。為什麼不將目錄的完整路徑存儲在變量中呢?

通過聲明變量,您可以在不脫頭腦指定路徑的情況下導航到目標目錄。

1. 運行以下命令將C:\Program Files\PowerShell\目錄存儲到$psh變量中,並將該位置($psh)設置為當前目錄。

# 將目錄路徑存儲到變量中
$psh = 'C:\Program Files\PowerShell\'
# 將來自$psh變量的目錄設置為當前目錄
Set-Location -Path $psh

下面的輸出確認了成功使用變量更改目錄。無論您的當前目錄是什麼,您都可以通過$psh變量快速導航到C:\Program Files\PowerShell\目錄。

但請注意,此方法僅在當前的PowerShell會話中有效,除非您將變量保留下來,如下一步所示。

Navigating to a location stored in a variable

2. 接下來,運行以下命令,這些命令不會提供輸出,但將ev_psh變量作為環境變量(SetEnvironmentVariable)持久化,並將其值設置為目錄的完整路徑。

# 添加psh為環境變量
[System.Environment]::SetEnvironmentVariable('ev_psh', 'C:\Program Files\PowerShell\', 'Machine')
# 重新加載新添加的環境變量(ev_psh)
$Env:ev_psh = [System.Environment]::GetEnvironmentVariable("ev_psh","Machine")

3. 最後,運行以下命令,將ev_psh環境變量的值設置為當前目錄。請確保您所在的目錄與ev_psh變量中的目錄不同。

Set-Location -Path $env:ev_psh
Setting the value of an environment variable as the current directory

在PowerShell的位置歷史記錄中循環遍歷目錄

在PowerShell中循環遍歷目錄的另一種快速方法是使用位置歷史記錄。 -Path參數告訴Set-Location cmdlet從位置歷史記錄(上一個和下一個)中導航到另一個目錄,具體取決於指定的值(-+)。

要在PowerShell的位置歷史記錄中循環遍歷目錄:

執行以下命令,將歷史記錄中的位置設置為當前目錄。 + 字符將您前進到位置歷史記錄中的下一個位置,而 - 字符則將您後退到上一個位置。


# 將系統根目錄設置為當前目錄

Set-Location -Path $env:SystemRoot


# 在歷史記錄中後退到上一個目錄(證書提供者)

Set-Location -Path -


# 再次在歷史記錄中後退到上一個目錄(系統根目錄)

Set-Location -Path -


# 在歷史記錄中前進到下一個工作目錄(證書提供者)

Set-Location -Path +


# 在歷史記錄中前進到下一個工作目錄(HKEY_LOCAL_MACHINE hive)

Set-Location -Path +
Cycling through locations in the location history

結論

在選擇受限時,文件系統導航可能會變得棘手。但是使用 PowerShell 更改目錄命令,如 Set-Location,您有很多選擇。如何更有效地導航您的文件系統完全取決於您。

此外,掌握使用 Push-LocationPop-Location 保存和回憶最近位置的技能是一項寶貴的技能。

這些技巧讓您可以在 PowerShell 中快速、無縫地移動目錄和位置。但要進一步改進,為什麼不考慮學習其他命令,比如 Get-ChildItem,這可以在您的日常任務中節省大量時間嗎?

Source:
https://adamtheautomator.com/powershell-change-directory/