2010年7月1日木曜日

◆パス関連(Convert-Path,Resolve-Path,Split-Path,Join-Path)

Convert-PathとResolve-Pathは似たようなコマンド。
PS>Convert-Path .\
D:\temp
PS>Resolve-Path .\ 
Path
----
D:\temp

これを見るとどちらもPathを解決してくれているが、Convert-Pathは文字列、Resolve-PathはPathInfoオブジェクトが返ってきている。

ワイルドカードも使える。
PS>cvpa *.tmp
D:\temp\CR_5BC5.tmp
D:\temp\GUR7F5C.tmp
D:\temp\GUR99ED.tmp
PS>rvpa *.tmp 
Path
----
D:\temp\CR_5BC5.tmp
D:\temp\GUR7F5C.tmp
D:\temp\GUR99ED.tmp


違いが出るのはこんな時、
PS>Convert-Path HKLM:\software\microsoft
HKEY_LOCAL_MACHINE\software\microsoft
PS>Resolve-Path HKLM:\software\microsoft 
Path
----
HKLM:\software\microsoft

Convert-Pathはドライブ表記から通常の表記に変換してくれる。

Split-Pathはパスを様々な場所で分割して取り出してくれる。
PS>rvpa *.tmp | Split-Path -parent
D:\temp
D:\temp
D:\temp
PS>rvpa *.tmp | Split-Path -leaf
CR_5BC5.tmp
GUR7F5C.tmp
GUR99ED.tmp
PS>rvpa *.tmp | Split-Path -Qualifier
D:
D:
D:
PS>rvpa *.tmp | Split-Path -NoQualifier
\temp\CR_5BC5.tmp
\temp\GUR7F5C.tmp
\temp\GUR99ED.tmp

parentがデフォルトのようだ。

Join-Pathはパスの連結。
PS>Join-Path  -Path  c:\windows\  -ChildPath  \system32
c:\windows\system32
PS>Join-Path  -Path  c:\windows\  -ChildPath  \system99
c:\windows\system99

\記号が重複してもよきに計らってくれる。

Resolveパラメータを付けると実存チェックをしてくれる。
PS>Join-Path  -Path  c:\windows\  -ChildPath  \system32 -Resolve
C:\windows\system32
PS>Join-Path  -Path  c:\windows\  -ChildPath  \system99 -Resolve
Join-Path : パス 'C:\windows\system99' が存在しないため検出できません。
発生場所 行:1 文字:10
+ Join-Path <<<<   -Path  c:\windows\  -ChildPath  \system99 -Resolve
    + CategoryInfo          : ObjectNotFound: (C:\windows\system99:String)
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.Jo


単純に実存チェックをするときにはTest-Pathを使う。
PS>Test-Path c:\windows\system32
True
PS>Test-Path c:\windows\system99
False

0 件のコメント:

コメントを投稿