2013-08-12 19 views
8

処理するパスのリストを文字列の配列として受け入れるスクリプトがあります。私はこれらのパスを生成するのにGet-ChildItemを使用しています。私は、System.IO.FileInfoオブジェクトから文字列への変換において、いくつかの面白い振る舞いに出くわしました。Get-ChildItemの出力を文字列[]に変換する

例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:

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 
... 

例(-Recurseと、文字列への変換は不合理と無駄になるように) 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

:http://stackoverflow.com/a/2744637/520612 –

+0

@ CBそれに感謝します - それはまさに私が探していた答えです。誰かが私にこの質問をそれの重複としてマークするのを助けることができますか? –

+0

[同じような入力データの文字列\ [\]への不思議な異なる変換](http://stackoverflow.com/questions/2744047/mysterious-different-conversion-to-string-of-seemingly-same-input) -Data) –

答えて

6

論理答え:

あなたは文字列にFileInfoオブジェクトをキャストしています。 gci pathを実行すると、そのフォルダのファイルとディレクトリのみがあります。だから、アイテムの名前に変換するだけでOKです。

gci path\*を使用している場合は、フォルダ間であり、名前に変換するだけでは無効なので、パスが含まれます。

名前またはフルパスをしたいかに応じて、次の操作を行います。

gci $path | select -expand Name 

または

gci $path | select -expand FullName 
ここで読む
+0

論理的に見えるかもしれませんが、-Recurseスイッチを組み込むと同じことが起こります。その場合の出力はまったく役に立たず、ディレクトリ名のないファイル名がたくさんあります。 –

+0

いくつかの例題で質問を更新しました。 –

関連する問題