2013-08-12 20 views
8

Tôi có một tập lệnh chấp nhận một danh sách các đường dẫn để xử lý dưới dạng một chuỗi các chuỗi. Tôi đang sử dụng Get-ChildItem để tạo các đường dẫn đó. Tôi đã đi qua một số hành vi thú vị trong việc chuyển đổi từ System.IO.FileInfo đối tượng thành chuỗi.Chuyển đổi đầu ra Get-ChildItem thành chuỗi []

Ví dụ 1:

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

Ví dụ 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 

Ví dụ 3: (Với -recurse, vì vậy việc chuyển đổi thành các chuỗi là vô lý và vô dụng)

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

Ví dụ 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 
... 

Việc thêm ký tự đại diện vào đường dẫn làm cho các chuỗi kết quả là tên đường dẫn đầy đủ, thay vì chỉ tên tệp/thư mục. Lý do tại sao điều này xảy ra?

Tôi hiểu cách Tôi có thể giải quyết hành vi này và nhận thông tin tôi cần; những gì tôi quan tâm là lý do tại sao điều này đang xảy ra, do chúng tôi chỉ chuyển đổi các đối tượng System.IO.FileInfoSystem.IO.DirectoryInfo thành chuỗi trong mọi trường hợp.

+3

đã đọc ở đây: http://stackoverflow.com/a/2744637/520612 –

+0

@ CB cảm ơn vì điều đó - đó chính là câu trả lời tôi đang tìm kiếm. Ai đó có thể giúp tôi đánh dấu câu hỏi này là bản sao của câu hỏi đó không? –

+0

có thể trùng lặp của [Chuyển đổi khác nhau bí ẩn thành chuỗi \ [\] của dữ liệu đầu vào dường như giống nhau] (http://stackoverflow.com/questions/2744047/mysterious-different-conversion-to-string-of-seemingly-same-input -data) –

Trả lời

6

câu trả lời hợp lý:

Bạn đang đúc các FileInfo đối tượng chuỗi. Khi bạn thực hiện gci path, bạn chỉ có tệp và thư mục từ thư mục đó. Vì vậy, nó là ok để chỉ cần chuyển đổi sang tên của mục.

Khi bạn đang sử dụng gci path\*, nó nằm trong các thư mục và chỉ chuyển đổi thành tên không hợp lệ, do đó, nó bao gồm đường dẫn.

Tùy thuộc vào việc bạn muốn tên hoặc đường dẫn đầy đủ, thực hiện điều này:

gci $path | select -expand Name 

hoặc

gci $path | select -expand FullName 
+0

Điều đó có vẻ hợp lý, nhưng điều tương tự cũng xảy ra nếu tôi bao gồm công tắc -Recurse. Vì vậy, đầu ra trong trường hợp đó là hoàn toàn vô dụng - chỉ là một loạt các tên tập tin không có tên thư mục. –

+0

Tôi đã cập nhật câu hỏi của mình với một số ví dụ về Ví dụ. –