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

Nik*_*bas 12 powershell

我有一个脚本接受一个路径列表,作为一个字符串数组进行处理.我正在用它Get-ChildItem来生成这些路径.我在从System.IO.FileInfo对象到字符串的转换中遇到了一些有趣的行为.

例1:

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

例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
Run Code Online (Sandbox Code Playgroud)

示例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
...
Run Code Online (Sandbox Code Playgroud)

例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
...
Run Code Online (Sandbox Code Playgroud)

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

我理解如何解决这种行为并获得我需要的信息; 我感兴趣的是,为什么发生这种情况,因为我们只是转换System.IO.FileInfoSystem.IO.DirectoryInfo在所有情况下对象的字符串.

man*_*lds 9

逻辑答案:

您正在将FileInfo对象转换为字符串.执行此操作时gci path,您只能从该文件夹中获取文件和目录.所以只需转换为项目的名称即可.

在使用时gci path\*,它跨文件夹,只是转换为名称无效,因此它包含路径.

根据您是否需要名称或完整路径,请执行以下操作:

gci $path | select -expand Name
Run Code Online (Sandbox Code Playgroud)

要么

gci $path | select -expand FullName
Run Code Online (Sandbox Code Playgroud)