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:)上的 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命令(即“change directory”)让你可以快速切换到另一个子目录,而不管你当前所在的目录是什么。

过去,cd命令用于在命令提示符中导航驱动器和目录。微软使cd命令向后兼容,因此你仍然可以在PowerShell中导航目录。

继续阅读并了解如何使用cd命令导航你的文件系统。

移动到不同驱动器中的目录

如果考虑到要跳转到另一个驱动器中的子目录可能会有些麻烦。好吧,没有必要想得太多。你会惊讶地发现cd命令可以让你快速跳转到另一个驱动器,同时进入其中的一个目录。

运行下面的命令,以导航到D:*驱动器中名为Kitty的子目录。

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 命令浏览文件系统

尽管cd命令在 PowerShell 中无疑有效,微软引入了许多 cmdlet,如Set-Location,让您可以在文件系统中导航。

这些 cmdlet 提供了比cd命令更强大的功能,您可以使用它们在不同驱动器之间切换,导航堆叠的位置,并在位置历史记录中循环浏览目录。

请继续关注,见证 PowerShell 命令在导航您的文件系统中有多强大。

从不同驱动器设置位置

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

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

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

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

运行下面的命令,导航到-Path参数中指定的D:驱动器中的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 cmdlets 允许您以后进先出(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/