Это должно делать то, что вы хотите:
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, перенаправленного на это имя файла, что создаст файл.