当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 如何在PowerShell中获取当前目录或脚本路径?

作者:精品下载站 日期:2024-12-14 06:22:45 浏览:15 分类:玩电脑

如何在PowerShell中获取当前目录或脚本路径?


[玩转系统] 如何在PowerShell中获取当前目录或脚本路径?

作为使用 PowerShell 的专业人士,我经常收到有关从脚本获取当前目录的问题。 PowerShell 是 Microsoft 的多功能脚本语言,已深入集成到 Windows 操作系统中。这使得它对于处理文件和目录操作任务非常有效,因此了解当前正在工作的路径非常重要。因此,在本指南中,我们将引导您了解使用 PowerShell 获取当前目录、脚本目录和脚本路径的各种方法。无论您想要现有脚本的路径还是当前位置的完整路径,我们都能满足您的要求。

了解 PowerShell 中的当前目录

在 PowerShell 中,当前目录是指您当前正在其中工作的目录。这很重要,因为许多 cmdlet 和脚本都使用相对于当前目录的文件和目录。例如,如果您位于“C:\Users\Thomas\Desktop”目录中,并且运行访问 Documents 目录中文件的脚本,则该脚本将在 C:\Users\Thomas\Desktop 中查找该文件\Documents 而不是 C:\Users\Thomas\Documents。人们可以在 PowerShell 中轻松创建、移动、重命名和删除目录。但在有效地使用目录之前,您需要知道您当前所在的位置。这就是“获取当前目录”操作引起关注的地方。

当前目录与 PowerShell 安装目录或用户配置文件目录不同。您可以使用 Set-Location cmdlet 更改当前目录,或使用 cd 命令导航到新目录。

如何在PowerShell中获取当前目录?

无论您是处理文件、更改配置还是使用脚本,了解当前目录都至关重要。当前目录或工作目录是 PowerShell 环境当前运行的目录(文件夹)。它定义了相对路径的起始点,并在文件管理任务中发挥着至关重要的作用。

方法 1:使用 Get-Location Cmdlet

在 PowerShell 中获取当前目录的最直接方法是使用 Get-Location cmdlet。此 cmdlet 检索当前工作位置,即您所在目录的路径。此 cmdlet 返回当前目录的路径,包括路径和提供程序(文件系统或注册表)。要使用它,请输入“Get-Location”并按 Enter。系统将在PowerShell提示符中显示当前目录的完整路径。

Get-Location cmdlet 的语法如下:


#Syntax 1
Get-Location
   [-PSProvider <String[]>]
   [-PSDrive <String[]>]
   [<CommonParameters>]

#Syntax 2
Get-Location
   [-Stack]
   [-StackName <String[]>]
   [<CommonParameters>]

以下是此 cmdlet 的漂亮参数列表。

ParameterDescriptionExample-PSDriveRetrieves the current location from the specified PowerShell drive. E.g., PowerShell Registry Provider. Get-Location -PSDrive HKCU-PSProviderRetrieves the current location for the specified provider. Providers can include the FileSystem, Registry, Certificate stores, etc. If the provider supports multiple drives, this cmdlet returns the location of the most recently accessed drive.Get-Location -PSProvider FileSystem-StackDisplays the location default stack. PowerShell maintains a stack of locations you can push to and pop from using Push-Location cmdlet and Pop-Location cmdlet. This parameter shows the current stack contents.Get-Location -Stack-StackNameThe Stackname parameter displays the location from a named location stack. You can have multiple named location stacks.Get-Location -StackName myStack

它可以在 PowerShell 驱动器、不同驱动器、Windows 目录等之间移动。下面是使用 Get-Location 命令获取当前目录路径的示例:


PS C:\Users\Thomas> Get-Location

Path
----
C:\Users\Thomas

此示例显示当前 Windows 目录是 C:\Users\Thomas。您还可以使用别名“pwd”来获取当前目录。您可以使用 pwd(“打印工作目录”的缩写)cmdlet 在 PowerShell 控制台中显示当前目录。要使用它,请输入“pwd”并按 Enter。将显示当前目录的完整路径。


PS C:\Users\Thomas> pwd

Path
----
C:\Users\Thomas

当您运行此命令时,PowerShell 将返回当前目录的路径。这是您的跳板,是定义所有相对路径的起点。

方法 2:使用 $PSScriptRoot 变量获取 PowerShell 中的脚本目录

脚本目录是当前运行脚本所在的目录。这对于访问与该脚本位于同一目录中的其他文件或脚本非常有用。要获取 PowerShell 中的脚本目录,可以使用 $PSScriptRoot 变量。该变量包含脚本所在目录的完整路径。下面是一个示例:假设您有一个名为“CopyFiles.ps1”的 PowerShell 脚本文件,其中包含以下内容:


Echo $PSScriptRoot

执行脚本会检索存储脚本的当前位置。


PS C:\Users\Thomas\Desktop> .\CopyFiles.ps1

C:\Users\Thomas\Desktop

此示例显示脚本目录为 C:\Users\Thomas\Desktop\。请注意,$PSScriptRoot 变量仅在脚本中可用,在 PowerShell 控制台或 PowerShell ISE 中不可用。

方法3:在PowerShell中获取脚本路径

脚本路径是当前运行脚本的完整路径,包括驱动器号和任何子目录。要获取 PowerShell 中的脚本路径,可以使用 $MyInspiration 变量。该变量包含有关当前脚本的信息,包括路径和命令行参数。这是一个例子:


#Get Script Path
$MyInvocation.MyCommand.Path

#Get the folder of the script
Split-Path -Path $MyInvocation.MyCommand.Path -Parent

以下是运行脚本时您将看到的内容:


PS C:\Users\Thomas\Desktop> .\MyScript.ps1

C:\Users\Thomas\Desktop\MyScript.ps1
C:\Users\Thomas\Desktop

此示例显示脚本的绝对路径:C:\Users\Thomas\Desktop\MyScript.ps1。请注意,$MyInitation 变量仅在脚本中可用,在 PowerShell 控制台中不可用。

方法 4:使用 $PWD 变量

在 PowerShell 中获取当前目录的另一种方法是使用 $PWD 变量。该变量将当前工作目录保存为 PowerShell 对象。要使用此方法显示当前目录,请键入“$PWD”并按 Enter。将显示当前目录的完整路径。


$pwd | Select -ExpandProperty Path

方法 5:使用 [Environment]::CurrentDirectory 属性

最后,您还可以使用 [Environment]::CurrentDirectory 属性获取 PowerShell 中的当前目录。此属性以字符串形式返回当前目录的路径。要使用此方法显示当前目录,请键入“[Environment]::CurrentDirectory”并按 Enter。将显示当前目录的完整路径。


[Environment]::CurrentDirectory 

[玩转系统] 如何在PowerShell中获取当前目录或脚本路径?

方法 6:使用 Get-Item cmdlet 获取当前目录路径

您可以使用以下命令使用 Get-Item cmdlet 获取当前目录路径:


(Get-Item .).FullName

这里,点(.)指定当前目录。

在 PowerShell 中使用目录时要避免的常见错误

以下是在 PowerShell 中使用目录时要避免的一些常见错误:

  1. 假设当前目录始终相同。当前目录可以通过脚本、cmdlet 或用户输入进行更改。
  2. 使用相对路径而不考虑当前目录。相对路径是相对于当前目录解析的,因此更改当前目录可能会影响结果。
  3. 我们在访问文件或目录时经常忘记处理错误。 PowerShell 提供了许多错误处理机制,例如 Try-Catch-Finally 语句和 -ErrorAction 参数。

结论和最终想法

总之,在 PowerShell 中获取当前目录的方法有多种,从 pwdGet-Location 等简单命令到使用变量和属性。在本指南中,我解释了 PowerShell 中当前目录的概念,并向您展示了如何使用 PowerShell 获取当前目录、脚本目录和脚本路径。无论您需要完整路径还是脚本目录,都可以在 PowerShell 中快速轻松地获取。尝试这些方法,找到最适合您需求的一种。

要将位置更改为其他路径,请使用 Set-Location cmdlet(例如 Set-Location C:\Temp)。更多信息请参见:如何在 PowerShell 中更改当前目录?

经常问的问题:

如何在 PowerShell 中检索当前目录?

要在 PowerShell 中检索当前目录,您可以使用 PowerShell cmdlet,例如“Get-Location”或其别名 pwd。例如:

$currentDirectory = Get-Location
Write-Host "Current directory: $($currentDirectory.Path)"

如何获取PowerShell中当前脚本的路径?

要获取当前脚本在PowerShell中的路径,可以使用“$MyInitation.MyCommand.Path”命令。

如何访问 PowerShell 中的特定文件夹?

要访问 PowerShell 中的特定文件夹,可以使用“Set-Location”cmdlet 或“cd”别名,后跟要访问的文件夹的路径。

如何在 PowerShell 中查找文件夹的路径?

在 PowerShell 中,您可以使用相对路径的 Resolve-Path 查找文件夹的路径:

$RelativePath = ".\Logs"
$FullPath = Resolve-Path $RelativePath
Write-Output $FullPath

如何检查特定目录是否是当前目录?

要检查特定目录是否是当前目录,可以将当前目录路径与所需目录路径进行比较。例如:

if ((Get-Location).Path -eq "C:\Users\Thomas") {
Write-Host "You are in the desired directory."
} else {
Write-Host "You are not in the desired directory."
}

如何获取当前目录的父目录?

要在PowerShell中获取当前目录的父目录,可以使用以下方法:使用Get-Location获取当前目录。然后,使用带有 -Parent 参数的 Split-Path cmdlet 获取父目录。

#Get the current directory
$CurrentDir = Get-Location
#Get the parent directory
$parentDir = Split-Path $currentDir -Parent
$parentDir

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯