将 Get-ChildItem 输出转换为 string[]

14

我有一个脚本,接受一个字符串数组作为要处理的路径列表。我正在使用Get-ChildItem生成这些路径。在将System.IO.FileInfo对象转换为字符串时,我发现了一些有趣的行为。

示例1:

PS C:\Users\Nikhil\Documents> [string[]](Get-ChildItem .\GitHub\)
toc
toc-gh-pages
Publish gh-pages.txt

例子2:

PS C:\Users\Nikhil\Documents> [string[]](Get-ChildItem .\GitHub\*)
C:\Users\Nikhil\Documents\GitHub\toc
C:\Users\Nikhil\Documents\GitHub\toc-gh-pages
C:\Users\Nikhil\Documents\GitHub\Publish gh-pages.txt

示例3:(使用-Recurse选项,因此转换为字符串是不合逻辑和无用的)

PS C:\Users\Nikhil\Documents\GitHub> [string[]](Get-ChildItem .\toc-gh-pages -Recurse)
assets
css
lib
_layouts
_site
.gitattributes
.gitignore
index.html
_config.yml
jquery.toc.zip
docs.less
docs.min.css
google-code-prettify
jquery.toc
lang-apollo.js
...

例子 4:

PS C:\Users\Nikhil\Documents\GitHub> [string[]](Get-ChildItem .\toc-gh-pages\*.* -Recurse)
C:\Users\Nikhil\Documents\GitHub\toc-gh-pages\assets\jquery.toc.zip
C:\Users\Nikhil\Documents\GitHub\toc-gh-pages\css\docs.less
C:\Users\Nikhil\Documents\GitHub\toc-gh-pages\css\docs.min.css
C:\Users\Nikhil\Documents\GitHub\toc-gh-pages\lib\google-code-prettify\lang-apollo.js
C:\Users\Nikhil\Documents\GitHub\toc-gh-pages\lib\google-code-prettify\lang-basic.js
C:\Users\Nikhil\Documents\GitHub\toc-gh-pages\lib\google-code-prettify\lang-clj.js
C:\Users\Nikhil\Documents\GitHub\toc-gh-pages\lib\google-code-prettify\lang-css.js
C:\Users\Nikhil\Documents\GitHub\toc-gh-pages\lib\google-code-prettify\lang-dart.js
C:\Users\Nikhil\Documents\GitHub\toc-gh-pages\lib\google-code-prettify\lang-erlang.js
C:\Users\Nikhil\Documents\GitHub\toc-gh-pages\lib\google-code-prettify\lang-go.js
C:\Users\Nikhil\Documents\GitHub\toc-gh-pages\lib\google-code-prettify\lang-hs.js
C:\Users\Nikhil\Documents\GitHub\toc-gh-pages\lib\google-code-prettify\lang-lisp.js
C:\Users\Nikhil\Documents\GitHub\toc-gh-pages\lib\google-code-prettify\lang-llvm.js
C:\Users\Nikhil\Documents\GitHub\toc-gh-pages\lib\google-code-prettify\lang-lua.js
...

在路径中增加通配符会导致生成的字符串成为完整的路径名,而不仅仅是文件/文件夹名称。为什么会这样呢?

我明白如何解决这个问题并获取所需信息; 我感兴趣的是,既然我们在所有情况下都只是将 System.IO.FileInfoSystem.IO.DirectoryInfo 对象转换为字符串,那么为什么会发生这种情况?


3
阅读此处:https://dev59.com/PE3Sa4cB1Zd3GeqPvoP4#2744637 - CB.
@C.B. 谢谢你,那正是我在寻找的答案。有人可以帮我将这个问题标记为那个问题的重复吗? - Nikhil Dabas
1个回答

15

逻辑回答:

您正在将 FileInfo 对象转换为字符串。当您执行 gci path 时,您只有来自该文件夹的文件和目录。因此,将其转换为项目名称是可以的。

当您使用 gci path\* 时,它跨越文件夹,仅转换为名称是无效的,因此它包括路径。

根据您想要名称还是完整路径,做如下操作:

gci $path | select -expand Name
或者
gci $path | select -expand FullName

这似乎很合理,但如果我包括-Recurse开关,同样的事情也会发生。因此,在那种情况下输出是完全无用的--只有一堆没有目录名称的文件名。 - Nikhil Dabas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接