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字符串。

4

1 回答 1

14

逻辑答案:

您正在将FileInfo对象转换为字符串。当您这样做时gci path,您只有该文件夹中的文件和目录。因此,只需转换为项目名称即可。

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

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

gci $path | select -expand Name

或者

gci $path | select -expand FullName
于 2013-08-12T12:29:21.863 回答