Mar*_*lec 76 powershell scripting
所以,如果我有一个存储在变量中的目录,请说:
$scriptPath = (Get-ScriptDirectory);
Run Code Online (Sandbox Code Playgroud)
现在我想找到两个父级别的目录.
我需要一个很好的做法:
$parentPath = Split-Path -parent $scriptPath
$rootPath = Split-Path -parent $parentPath
Run Code Online (Sandbox Code Playgroud)
我可以在一行代码中找到rootPath吗?
rer*_*run 135
get-item 这是你友好的帮助.
(get-item $scriptPath ).parent.parent
Run Code Online (Sandbox Code Playgroud)
如果你只想要字符串
(get-item $scriptPath ).parent.parent.FullName
Run Code Online (Sandbox Code Playgroud)
如果$scriptPath指向一个文件,那么你必须首先调用Directory它的属性,所以调用看起来像这样
(get-item $scriptPath).Directory.Parent.Parent.FullName
Run Code Online (Sandbox Code Playgroud)
备注
仅在$scriptPath存在时才有效.否则,您必须使用Split-Pathcmdlet.
小智 30
我已经解决了这个问题:
$RootPath = Split-Path (Split-Path $PSScriptRoot -Parent) -Parent
Run Code Online (Sandbox Code Playgroud)
mjo*_*nor 18
您可以在反斜杠中将其拆分,并使用负数组索引进行倒数第二个以获取祖父目录名称.
($scriptpath -split '\\')[-2]
Run Code Online (Sandbox Code Playgroud)
你必须加倍反斜杠才能在正则表达式中将其转义.
要获得整个路径:
($path -split '\\')[0..(($path -split '\\').count -2)] -join '\'
Run Code Online (Sandbox Code Playgroud)
并且,查看split-path的参数,它将路径作为管道输入,因此:
$rootpath = $scriptpath | split-path -parent | split-path -parent
Run Code Online (Sandbox Code Playgroud)
mit*_*daa 11
您可以使用
(get-item $scriptPath).Directoryname
Run Code Online (Sandbox Code Playgroud)
获取字符串路径或者如果您希望使用Directory类型:
(get-item $scriptPath).Directory
Run Code Online (Sandbox Code Playgroud)
这是最简单的解决方案
"$path\..\.."
如果你想获得绝对路径,你可以
"$path\..\.." | Convert-Path
这里有一个可重用的解决方案,首先定义getParent函数,然后直接调用它。
function getParent($path, [int]$deep = 1) {
$result = $path | Get-Item | ForEach-Object { $_.PSIsContainer ? $_.Parent : $_.Directory }
for ($deep--; $deep -gt 0; $deep--) { $result = getParent $result }
return $result
}
Run Code Online (Sandbox Code Playgroud)
getParent $scriptPath 2
Run Code Online (Sandbox Code Playgroud)
您可以split-path根据需要简单地链接多个:
$rootPath = $scriptPath | split-path | split-path
Run Code Online (Sandbox Code Playgroud)
在PowerShell 3中,$PsScriptRoot或者您对两个父母的问题,
$dir = ls "$PsScriptRoot\..\.."
Run Code Online (Sandbox Code Playgroud)
对其他答案进行一些推断(尽可能以适合初学者的方式):
使用 GetType 方法检查对象类型以查看您正在使用的内容:$scriptPath.GetType()
最后,一个有助于制作俏皮话的快速提示:Get-Item 有别名gi,Get-ChildItem 有别名gci。
| 归档时间: |
|
| 查看次数: |
140255 次 |
| 最近记录: |