因此,如果我有一个存储在变量中的目录,请说:
$scriptPath = (Get-ScriptDirectory);
现在,我想找到两个父级目录。
我需要一个很好的方法:
$parentPath = Split-Path -parent $scriptPath
$rootPath = Split-Path -parent $parentPath
我可以用一行代码进入rootPath吗?
Answers:
get-item
是您在这里的友好帮助之手。
(get-item $scriptPath ).parent.parent
如果只想要字符串
(get-item $scriptPath ).parent.parent.FullName
如果$scriptPath
指向文件,则必须首先调用该文件的Directory
属性,因此调用看起来像这样
(get-item $scriptPath).Directory.Parent.Parent.FullName
备注
仅在$scriptPath
存在时才起作用。否则,您必须使用Split-Path
cmdlet。
.parent
仅适用于目录对象。如果我有文件路径,并且想找到该文件所在目录的父目录,则需要使用(get-item $PathToFile ).Directory.parent
$scriptPath
存在时有效。否则就使用Split-Path $scriptPath -parent
。
我已经这样解决了:
$RootPath = Split-Path (Split-Path $PSScriptRoot -Parent) -Parent
$RootPath = Split-Path (Split-Path $PSScriptRoot)
也有效,因为它-Parent
是Split-Path
您可以在反斜杠处将其分割,然后使用负数组索引获取倒数第二个,仅获得祖父母目录名称。
($scriptpath -split '\\')[-2]
您必须将反斜杠加倍才能在正则表达式中转义。
获取完整路径:
($path -split '\\')[0..(($path -split '\\').count -2)] -join '\'
并且,查看split-path的参数,它将路径作为管道输入,因此:
$rootpath = $scriptpath | split-path -parent | split-path -parent
您可以使用
(get-item $scriptPath).Directoryname
获取字符串路径,或者如果要使用目录类型,请使用:
(get-item $scriptPath).Directory
在PowerShell 3中,$PsScriptRoot
或者您有两个父母要问的问题,
$dir = ls "$PsScriptRoot\..\.."
Split-Path -Path (Get-Location).Path -Parent
在其他答案上进行一些推断(以对初学者友好的方式):
使用GetType方法检查对象类型以查看正在使用的对象: $scriptPath.GetType()
最后,一个有助于建立单线的快速提示:Get-Item具有gi
别名,而Get-ChildItem具有gci
别名。