2012-12-22 8 views
7

Sto provando a scrivere uno script che otterrà i nomi di tutte le cartelle in una directory specifica e quindi restituiremo ciascuna come una voce in una matrice. Da qui stavo per utilizzare ogni elemento dell'array per eseguire un ciclo più grande che utilizza ciascun elemento come parametro per una chiamata di funzione successiva. Tutto questo è attraverso PowerShell.Memorizzazione dei nomi delle cartelle di directory nella matrice Powershell

Al momento non ho questo codice:

function Get-Directorys 
{ 
    $path = gci \\QNAP\wpbackup\ 

    foreach ($item.name in $path) 
    { 
    $a = $item.name 
    } 
} 

Il $ linea di percorso sia corretto e me tutto ottiene le directory, ma il ciclo foreach è il problema dove effettivamente memorizza i singoli caratteri del primo directory invece di ciascun nome completo di directory per ciascun elemento. Ho fatto alcune ricerche su come Powershell crea array ma sono un po 'confuso e quindi speravo che qualcuno qui potesse indicarmi la giusta direzione.

Grazie per il vostro aiuto.

risposta

13

Ecco un'altra opzione utilizzando una pipeline:

$arr = Get-ChildItem \\QNAP\wpbackup | 
     Where-Object {$_.PSIsContainer} | 
     Foreach-Object {$_.Name} 
+0

Questa è una soluzione più completa. Dovrebbe essere contrassegnato come risposta. –

+1

questo è molto utile, grazie: | Foreach-Object {$ _. Nome} – Davos

+0

Nel mio caso, per qualche ragione, questo unisce tutti i nomi di dir in una singola stringa. – r41n

1

Credo che il problema sia che la variabile del ciclo foreach è $item.name. Quello che vuoi è una variabile di ciclo denominata $item e potrai accedere alla proprietà name su ognuno di essi.

cioè

foreach ($item in $path) 
{ 
    $item.name 
} 

anche prendere atto che ho lasciato $item.name non assegnato. In PowerShell, se il risultato non è memorizzato in una variabile, inviato a un altro comando, o altrimenti catturato, è incluso nel valore di ritorno della funzione.

+0

Grazie mille. Ho cambiato a questo e quindi assegnato ogni valore restituito a una variabile al di fuori della funzione. Da qui ora posso usare $ a [xxx] per ottenere il valore che voglio. Non ero a conoscenza del tuo secondo commento sui valori non memorizzati restituiti in quel modo. – Jingles177

+0

Sì. È un po 'truce che mi ha morso una o due volte, soprattutto perché non mi ero nemmeno reso conto di avere una produzione non consumata in quel momento. – jpmc26

3

$ array = (dir * .txt) .FullName

$ array è ora un elenco di percorsi per tutti i file di testo nella directory.

3

Per completezza, e la leggibilità:

questo ottenere tutti i file in "somefolder" che iniziano con 'F' a un array.

$FileNames = Get-ChildItem -Path '.\somefolder\' -Name 'F*' -File 

Questo ottiene tutte le directory di directory corrente:

$FileNames = Get-ChildItem -Path '.\' -Directory 
1
# initialize the items variable with the 
# contents of a directory 

$items = Get-ChildItem -Path "c:\temp" 

# enumerate the items array 
foreach ($item in $items) 
{ 
     # if the item is a directory, then process it. 
     if ($item.Attributes -eq "Directory") 
     { 
      Write-Host $item.Name//displaying 

      $array=$item.Name//storing in array 

     } 
}