したがって、変数にディレクトリが格納されている場合は、次のように言います。
$scriptPath = (Get-ScriptDirectory);
次に、2つ上のレベルのディレクトリを見つけたいと思います。
私は良い方法が必要です:
$parentPath = Split-Path -parent $scriptPath
$rootPath = Split-Path -parent $parentPath
1行のコードでrootPathにアクセスできますか?
回答:
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
コマンドレットを使用する必要があります。
.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
それをバックスラッシュで分割し、最後から2番目の配列を負の配列インデックスで取得して、祖父母のディレクトリ名だけを取得できます。
($scriptpath -split '\\')[-2]
正規表現でエスケープするには、バックスラッシュを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
他の答えを少し外挿するには(可能な限り初心者にやさしい方法で):
GetTypeメソッドを使用してオブジェクトタイプを確認し、使用しているものを確認します。 $scriptPath.GetType()
最後に、ワンライナーの作成に役立つ簡単なヒント:Get-Itemにはgi
エイリアスがあり、Get-ChildItemにはgci
エイリアスがあります。