Полезный ответ Мартина Брандла предоставляет эффективное решение, основанное на свойстве - ReadCount
с неясным именем, которое Get-Content
добавляет к каждой строке ввода, что отражает -основную строку *1006*число .
Использование блока сценариев с привязкой к задержке позволяет получить решение, которое является одновременно более коротким и заметно более быстрым:
Get-Content artists.txt | Set-Content -LiteralPath { "artists\$($_.ReadCount).txt" }
Что касается что вы пытались :
Переменная $counter
должна быть увеличена в блоке ForEach-Object
команды -Process
, т. Е. В блоке, который выполняется для каждого входного объекта (и обычно это только указанный блок, позиционно ).
2-й блок сценария, который вы передали, {$counter++}
, привязывается к параметру -End
, что означает блок, который должен быть выполнен один раз , после все объекты конвейера были получены.
Следовательно, вы могли бы использовать следующее:
$counter = 0
Get-Content artists.txt | Foreach-Object {
$_ | Set-Content "artists\$((++$counter)).txt"
}
Операция приращения встроенав расширяемой строке для краткости, но вы могли бы сделать это отдельнымte оператор.
Обратите внимание на использование дополнительной пары (...)
вокруг выражения ++$counter
, чтобы гарантировать, что значение выражения также output ;по умолчанию ++
просто увеличивает значение переменной, но не производит вывод.
Внешний $(...)
- оператор подвыражения - необходим для встраивания выражений или команд в расширяемые строки ("..."
).