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

标签 powershell

我有一个脚本,它接受路径列表作为字符串数组进行处理。我使用 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.FileInfo 和 System.IO.DirectoryInfo > 在所有情况下对象都是字符串。

最佳答案

逻辑答案:

您正在将 FileInfo 对象转换为字符串。当您执行gci path时,您仅拥有该文件夹中的文件和目录。所以直接转换成商品名称就可以了。

当你使用gci path\*时,它是跨文件夹的,仅仅转换为名称是无效的,所以它包含路径。

根据您想要名称还是完整路径,执行以下操作:

gci $path | select -expand Name

gci $path | select -expand FullName

关于powershell - 将 Get-ChildItem 输出转换为 string[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18186841/

相关文章:

string - 变量串联顺序错误

powershell - msdeploy密码未知字符

powershell - .Bat 文件无法运行 powershell 7

excel - 对多个文件运行 Excel 宏

powershell - 在 Powershell 中使用分号分隔符 csv

powershell - 在 Powershell 中批量重命名照片并向重复文件名添加字母

powershell - Powershell 中的目录书签?

powershell - 使用 powershell 编辑设备管理器

windows - Copy-Item 命令在 Powershell 命令行中有效,但在 bat 文件中无效

powershell - 无法使用 PowerShell 在任务计划程序中创建任务