2011-04-21 65 views
4

如果我運行這個簡單的命令:我可以包含根文件夾以編程方式獲取childitem輸出嗎?

gci e:\mytree -r | select fullname 

它給出了這樣的輸出:

E:\mytree\folder1                                          
E:\mytree\folder2                                          
E:\mytree\folder3                                          
E:\mytree\file1.txt                                          
E:\mytree\file12.txt                                         
E:\mytree\folder1\folder.with.dots                                      
E:\mytree\folder1\folder.with.dots\file inside folder with dots.txt                              
E:\mytree\folder3\file4.doc  

有沒有辦法在輸出,即使根文件夾包括,這樣我就可以有

E:\mytree 
E:\mytree\folder1                                          
E:\mytree\folder2                                          
E:\mytree\folder3                                          
E:\mytree\file1.txt                                          
E:\mytree\file12.txt                                         
E:\mytree\folder1\folder.with.dots                                      
E:\mytree\folder1\folder.with.dots\file inside folder with dots.txt                              
E:\mytree\folder3\file4.doc  

回答

4
get-childitem $root -recurse | foreach-object -begin { $arr = @((get-item $root).fullname) } -process { $arr+= $_.fullname } -end { $arr } 

使用的foreach對象cmdlet的開始開關,我們在處理從GET-childitem對象之前做了一些工作:我們創建一個數組,並把根的文件路徑在那裏。

然後,對於管道中的每個對象,我們將其文件路徑附加到數組。

最後,我們輸出數組到管道。

0

更新:我再次閱讀這個問題,並明白你的要求是不同的。現在看看如何做到這一點。 :)

OLD ANSWER

PSParentPath包含父文件夾。如果您在E:\中指向root,則可以使用root屬性獲取該值。

gci C:\Scripts -Recurse | Select FullName, PSParentPath 

或在第二種情況下,

gci C:\Scripts -Recurse | Select FullName, root 
0

這是我提出的想法

function get-tree($folder) { 
if (!(test-path $folder)) { 
     write-host "$folder doesn't exist" 
     return 
    } 
else { 
     $arr = @() 
     $Object = New-Object PSObject -Property @{ 
     fullname = $folder 
     } 
     $arr+=$object 
     gci $folder -r | % { 
           $Object = New-Object PSObject -Property @{ 
           fullname = $_.fullname 
           } 
           $arr+=$object 
          } 

    } 
$arr 
} 

get-tree E:\mytree 


E:\mytree                                            
E:\mytree\folder1                                          
E:\mytree\folder2                                          
E:\mytree\folder3                                          
E:\mytree\file1.txt                                          
E:\mytree\file12.txt                                         
E:\mytree\folder1\folder.with.dots                                      
E:\mytree\folder1\folder.with.dots\file inside folder with dots.txt                            
E:\mytree\folder3\file4.doc  

不過我會等其他建議。 :)

3
@(gi e:\mytree) + @(gci e:\mytree -r) | select fullname 

@(..)從每個表達式強制返回值是一個數組

0

這裏是我的「老學校」解決了這個問題。對我而言,使用和閱讀更容易。

# add all the file Paths to an array so the Parent can be included 
$ToUpdate = @() 

$FolderToUpdate = Get-ChildItem $DirectorytoChange -Directory 

foreach ($Folder in $FolderToUpdate) 
{ 
    #add the paths to the array 
    $ToUpdate += $Folder.FullName 
} 
# Include the Root 
$ToUpdate += $DirectorytoChange 


foreach ($Path in $ToUpdate) 
{ 
# Do stuff 
} 
相關問題