2012-04-25 4 views
27

ファイルのパス名の最後の部分だけを取得する必要があります。PowerShellを使用してsplit-pathからファイルの最下位ディレクトリ名を取得する

例:

c:\dir1\dir2\dir3\file.txt 

私は変数にDIR3取得する必要があります。

私はスプリットパスで試してきましたが、それは私に全体のパスを与えます。

+0

https://devcentral.f5.com/weblogs/joe/archive/2009/05/04/unix-to-powershell--- basename.aspx – mhitza

答えて

43

これはSplit-Path AFAICTの2つの呼び出し取ります

"c:\dir1\dir2\dir3\file.txt".split("\")[-2] 
+0

ありがとう!私の場合、-Leafを2回指定する必要がありました。あなたが書いた括弧の中にも--Parent、私の場合は最も内側のフォルダ名が必要でしたが、私のパスにはファイル名、フォルダだけが含まれていました。 –

+2

ありがとう!私の似ていた!私の場合は、<(Split-Path "\\ usa0xxxnas.na.xxx.net \ xxxbackups \ T_SQL_Web_Prod \" -leaf)>を使用して、T_SQL_Web_Prodディレクトリを取得しました。 – Michele

3

を、パスが通常の形であることを行っている、あなたはString.Split()を使用することができますSystem.Uriを使用するオプション:

PS> ([uri]"c:\dir1\dir2\dir3\file.txt").segments[-2].trim('/') 
dir3 

ファイルが存在する場合ディスク上:

PS> (dir c:\dir1\dir2\dir3\file.txt).directory.name 
3

別:あなたは、単純な、それを維持したい場合は

PS> Split-Path (Split-Path c:\dir1\dir2\dir3\file.txt -Parent) -Leaf 
dir3 
+1

+1元のパスの最初の2つのディレクトリのみを含むパスを取得する必要があり、 '([uri]" c:\ dir1 \ dir2 \ dir3 \ file.txt "を使用して、 ).segments [1..3] -join "" 'これは' c:\ dir1 \ dir2'を返します。ありがとうございました! –

7

この質問は具体的にはそう分割経路を求めているが、他のいくつかの方法があります。

ファイルが存在する場合、私はそれを行うには非常に良くある見つける:

(Get-Item c:\dir1\dir2\dir3\file.txt).Directory.Name 

ファイルが存在しない場合、これは機能しません。あなたは、私が(オリジナルのアイデアのためにシェイ・レヴィのおかげで)これを使用して、あなたがいるディレクトリの名前をしたい場合は、一般的には

$path = [System.IO.Path]; 
$path::GetFileName($path::GetDirectoryName("c:\dir1\dir2\dir3\file.txt")) 
1

:その場合のもう一つの方法は、たとえば、.NETのAPIを使用することです:

PS>(DIR).directory.name [0]

関連する問題