如何在PowerShell中获取脚本所在目录并拆分为指定变量
解决PowerShell固定路径结构的变量提取问题
没问题!针对你这个固定路径结构的提取需求,我给你整理了两种适合新手的实现方式,步骤清晰易懂:
方法一:利用PowerShell自动变量+对象属性(推荐,PowerShell v3+)
这种方式最简洁,因为PowerShell提供了自动变量$PSScriptRoot,直接指向脚本所在的目录,不需要手动拼接路径。
完整代码示例:
# 获取脚本所在的目录(PowerShell v3及以上直接用这个自动变量) $scriptDir = $PSScriptRoot # 向上遍历一层,得到包含"Season X"的目录对象 $seasonDir = $scriptDir.Parent # 再向上遍历一层,提取目录名称就是var1(对应示例里的"Name") $var1 = $seasonDir.Parent.Name # 从"Season X"的目录名称中提取数字部分,用正则匹配所有数字 $var2 = [regex]::Match($seasonDir.Name, '\d+').Value # 验证结果 Write-Host "提取的var1: $var1" Write-Host "提取的var2: $var2"
关键说明:
$PSScriptRoot:PowerShell v3及以后版本的内置变量,直接返回当前脚本所在的目录路径,非常省心。.Parent:目录对象的属性,用来获取上级目录,相当于手动向上走一层。- 正则
\d+:匹配一个或多个数字,不管是Season 1还是Season 123都能正确提取数字部分。
方法二:兼容老版本PowerShell(v2及以下)
如果你用的是比较旧的PowerShell版本,$PSScriptRoot不可用,可以用$MyInvocation来获取脚本路径:
完整代码示例:
# 获取当前脚本的完整路径 $scriptFullPath = $MyInvocation.MyCommand.Definition # 提取脚本所在的目录(去掉脚本文件名) $scriptDir = Split-Path -Path $scriptFullPath -Parent # 提取"Season X"所在的目录路径 $seasonDirPath = Split-Path -Path $scriptDir -Parent # 提取var1:上级目录的名称(对应示例里的"Name") $var1 = Split-Path -Path $seasonDirPath -Leaf # 提取"Season X"的目录名称,再从中取数字 $seasonDirName = Split-Path -Path $scriptDir -Leaf $var2 = [regex]::Match($seasonDirName, '\d+').Value # 验证结果 Write-Host "提取的var1: $var1" Write-Host "提取的var2: $var2"
关键说明:
Split-Path:PowerShell的路径处理命令,-Parent参数返回上级目录,-Leaf参数返回路径的最后一段(也就是目录/文件名)。- 正则匹配部分和方法一完全一样,保证数字提取的通用性。
两种方法都能完美适配你说的固定路径结构C:\var1\Season var2\script.ps1,直接把代码复制到你的脚本里就能用啦!
内容的提问来源于stack exchange,提问作者Neorax
相关产品推荐
相关产品推荐

