2010-10-17 6 views
2

Aujourd'hui, j'ai commencé les scripts dans Windows PowerShell - donc s'il vous plaît excuser mon « mutisme » ...PowerShell: liste Sous-répertoire à un txt fichier

Je veux créer txt-Files avec le nom des sous-dossiers de chaque " rootfolder "sur le lecteur G :. Le G: \ j'ai les dossiers suivants:

1_data
2_IT_area
3_personal
4_apprenticeship
7_backup
8_archives
9_user_profile

J'ai donc écrit ce script:

get-childitem G:\ | ForEach-Object -process {gci $_.fullName -R} | WHERE {$_.PSIsContainer} > T:\listing\fileListing+$_.Name+.txt 

Mais le script ne fait pas ce que je suis NT - Il ne crée qu'un seul fichier texte. Pouvez-vous m'aider? Je l'ai déjà essayé comme décrit ici >>http://www.powershellpro.com/powershell-tutorial-introduction/variables-arrays-hashes/ "T: \ listing \ $ _. Name.txt" - ne fonctionne pas aussi bien ...

Merci beaucoup pour votre aide!

-Patrick

Répondre

3

Cela devrait faire ce que vous voulez:

Get-ChildItem G:\ | Where {$_.PSIsContainer} | 
    Foreach {$filename = "T:\fileListing_$($_.Name).txt"; 
      Get-ChildItem $_ -Recurse > $filename} 

Et si saisissant cette manière interactive (en utilisant des alias):

gci G:\ | ?{$_.PSIsContainer} | %{$fn = "T:\fileListing_$($_.Name).txt"; 
            gci $_ -r > $fn} 

La $_ variable spéciale est généralement valable uniquement dans les un scriptblock { ... } soit pour un objet Foreach-Object, Where-Object, soit pour tout autre scriptblock lié au pipeline. Donc, la construction de nom de fichier suivante T:\listing\fileListing+$_.Name+.txt n'est pas tout à fait raison. Généralement, vous développez une variable dans une chaîne comme ceci:

$name = "John" 
"His name is $name" 

Toutefois, lorsque vous accédez à un membre d'un objet comme avec $_.Name alors vous devez être en mesure d'exécuter une expression dans la chaîne. Vous pouvez le faire en utilisant l'opérateur de sous-expression $() .: par exemple

"T:\listing\fileListing_$($_.Name).txt" 

Tout ce que la construction de la chaîne de nom de fichier côté, vous ne pouvez pas utiliser $_ en dehors d'un scriptblock. Donc, vous déplacez simplement la construction du nom de fichier dans le scriptblock Foreach. Créez ensuite ce fichier avec le contenu du répertoire associé redirigé vers ce nom de fichier - qui créera le fichier.

+0

Merci beaucoup! - expliqué super précisément :) merci beaucoup! –

Questions connexes