我正在使用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
最佳答案
事实证明,从对ls
的替代调用提供的DirectoryInfo实例导致了不同的DirectoryInfo实例。特别,ls sub *_Pkg -Recurse | %{ [io.path]::IsPathRooted($_) }
将导致
False
False
False
而
ls *_Pkg -Recurse | %{ [io.path]::IsPathRooted($_) }
将导致True
True
True
重要的是要记住,
ls
实际上并未显示任何内容。 "$_"
中的%{ "$_" }
是write-host $_
的简写,等效于write-host $_.ToString()
。因此,事实证明,上没有根目录的 DirectoryInfo上的ToString()只会生成
Name
,而上有根目录的上的ToString()将使用FullName
。关于powershell - Powershell有时输出目录路径的方式有所不同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17701622/