PowerShell: листинг подкаталога в txt-файл - PullRequest
2 голосов
/ 17 октября 2010

Сегодня я начал писать сценарии в Windows PowerShell - поэтому, пожалуйста, извините за мою "тупость" ...

Я хочу создать txt-файлы с именами подпапок каждой "корневой папки" на диске G :.На G: \ у меня есть следующие папки:

1_данные
2_IT_area
3_personal
4_apprenticeship
7_backup
8_archives
9_user_profile

Итак, я написалэтот сценарий:

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

Но сценарий не делает то, что я хочу - он создает только один текстовый файл ... Вы можете мне помочь?Я уже попробовал это, как описано здесь >> http://www.powershellpro.com/powershell-tutorial-introduction/variables-arrays-hashes/ "T: \ перечисление \ $ _. Name.txt" - тоже не работает ...

Большое спасибо за вашПомогите!

-Патрик

1 Ответ

3 голосов
/ 17 октября 2010

Это должно делать то, что вы хотите:

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

И если вы набираете это в интерактивном режиме (используя псевдонимы):

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

Специальная переменная $_ обычно действует только в пределахscriptblock { ... } либо для Foreach-Object, Where-Object, либо для любого другого связанного с конвейером скриптового блока.Поэтому следующая конструкция имени файла T:\listing\fileListing+$_.Name+.txt не совсем верна.Обычно вы раскрываете переменную внутри строки следующим образом:

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

Однако, когда вы обращаетесь к члену объекта, например, с помощью $_.Name, вам необходимо иметь возможность выполнить выражение внутри строки,Вы можете сделать это, используя оператор подвыражения $(), например:

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

За исключением всей конструкции строки имени файла, вы не можете использовать $_ вне блока скрипта.Таким образом, вы просто перемещаете конструкцию имени файла внутри блока сценария Foreach.Затем создайте этот файл с содержимым связанного dir, перенаправленного на это имя файла, что создаст файл.

...