我使用ls
按慣例查找目錄。它的工作原理是找到它們,但我將結果輸送到其他功能。取決於'ls'(又名:dir
)的調用方式。這是爲什麼發生?Powershell輸出目錄路徑的方式有時會有所不同
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
我的理解是:「ls」是「get-childitem」的別名。當您處於「tmp40D4」下時,它會顯示完整路徑(絕對路徑),因爲* _pkg文件不是您目前所在目錄的「子」。但是當你指定「sub」時,它們都顯示相對路徑,因爲在這種情況下* _pkg文件是「sub」目錄的「子」。 – Peter
如果你想在第二個命令的絕對路徑,你可以這樣:'ls sub * _Pkg -Recurse | %{「$ _。Fullname」}' – Peter
@Peter我實際上並不屬於sub。我使用sub作爲ls的路徑。 「$ _」只是在默認情況下委託給寫主機,所以它與構造的DirectoryInfo實例有所不同。我覺得很奇怪。 –