2010-10-17 4 views
2

Сегодня я начал сценариев в Windows PowerShell - поэтому, пожалуйста, простите мой «немоты» ...PowerShell: Подкаталог список в текстовый файл-

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

1_data
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 

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

Спасибо вам за помощь!

-Patrick

ответ

3

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

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" 

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

+0

Большое вам спасибо! - объяснил супер точно :) Большое спасибо! –

Смежные вопросы