2015-06-01 90 views
0

我必須打印所有目錄和所有文件。但是,如果我找到一個目錄,我必須「進入目錄」並打印存儲在該目錄中的文件。它只有兩個級別,第一級是完整的導航,第二級是文件。Powershell for loop

我試過這個,但是,它不進入的目錄,這一切directorys兩次

$correcte = $args.Count 
if ($correcte -lt 1){ 
    forEach ($item in (Get-ChildItem)){ //first level of directories 
     if($item.PSIsContainer){ 
      forEach ($item in (Get-ChildItem)){    
      write-host $item //this should print the file inside the directory 
      } 
     } 
    } 
} 
else{ 
    write-host "You don't have to pass any parameter" 
} 

回答

0

它看起來像Get-ChildItem在同一文件夾兩次執行。在再次調用Get-ChildItem之前,您需要「移動」到目標目錄中。

請注意,在內部循環中再次使用變量名item並不是一個好主意。這很混亂。

0

Get-Childitem有一個-recurse參數,確實如此。如果你只是想喜歡它是由GCI生成打印出來的物品下面就足夠了:

Get-Childitem -recurse 
3

你需要在第二循環中重新使用$item變量一旦你確定這是一個目錄。

由於恩里科所指出的,也最好使用不同的變量名:

$correcte = $args.Count 
if ($correcte -lt 1){ 
    forEach ($item in (Get-ChildItem)){ //first level of directories 
     if($item.PSIsContainer){ 
      forEach ($subitem in (Get-ChildItem $item)){    
      write-host $subitem.FullPath //this should print the file inside the directory 
      } 
     } 
    } 
} 
else{ 
    write-host "You don't have to pass any parameter" 
} 

根據您的PowerShell的版本,您可能能夠通過剛開擺在首位的目錄來簡化這個:

Get-ChildItem -Directory | % { gci $_ }