1

ls慣例によりディレクトリを検索するために使用しています。それらを見つけるという点で機能しますが、結果を他の関数にパイプしています。'ls' (別名: dir) の呼び出し方法によって異なります。なぜこうなった?

C:\tmp40D4> ls *_Pkg -Recurse | %{"$_"}
C:\tmp40D4\sub\A_Pkg
C:\tmp40D4\sub\B_Pkg
C:\tmp40D4\sub\C_Pkg

C:\tmp40D4> ls sub *_Pkg -Recurse | %{"$_"}
A_Pkg
B_Pkg
C_Pkg

どちらの結果も DirectoryInfo インスタンスのリストです。

C:\tmp40D4> ls sub *_Pkg -Recurse | %{$_.GetType()}

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     DirectoryInfo                            System.IO.FileSystemInfo
True     True     DirectoryInfo                            System.IO.FileSystemInfo
True     True     DirectoryInfo                            System.IO.FileSystemInfo
4

2 に答える 2

2

結局のところ、代替呼び出しから提供された DirectoryInfo インスタンスはls、異なる DirectoryInfo インスタンスになります。具体的には、

ls sub *_Pkg -Recurse | %{ [io.path]::IsPathRooted($_) }結果として

False
False
False

一方、ls *_Pkg -Recurse | %{ [io.path]::IsPathRooted($_) }結果は

True
True
True

は実際には何も表示lsしないことに注意してください。inは の省略形です。"$_"%{ "$_" }write-host $_write-host $_.ToString()

したがって、ルート化されていないDirectoryInfoNameToString()は.FullName

于 2013-07-17T15:14:01.980 に答える
1

dir相対パスで表示しようとするという意味では賢いようですが、些細な場合に限られます。

を使用すると、常に絶対パスの使用を強制できます-Include *。あなたの場合:

ls sub *_Pkg -Include * -Recurse | %{"$_"}

詳細については、Get-ChildItem コマンドレットのdirドキュメントを参照してください (との両方lsがエイリアスです)。

于 2013-07-17T13:59:50.980 に答える