O cmdlet Get-ChildItem
obtém todos os arquivos na pasta atual e, em seguida,
usa o operador de pipeline ( |
) para enviar esses arquivos para Rename-Item.
Ele envia os arquivos um por um, cada um como um item separado,
de modo que Rename-Item
também os receba um por um e atue sobre cada um
por sua vez.
No bloco de script, a variável $_
automática representa cada objeto de arquivo à medida que chega ao comando através do pipeline, para que possa agir sobre ele.
Esse comportamento é muito diferente daquele do sistema operacional, onde o primeiro comando no pipeline produz toda a saída como uma lista, que é então passado como um bloco através do pipeline.
A filosofia de pipelines do PowerShell tem estes objetivos:
- Faça cada programa fazer uma coisa bem
- Espere que a saída de cada programa se torne a entrada para outro
Desta forma, você pode escrever programas, onde cada um faz uma coisa bem, sem exigir que o script use objetos artificiais, como listas. Esses objetos ou listas complexas exigiriam análise, que o PowerShell evita passando itens em vez de listas.
Para concluir, ForEach-Object
não é necessário porque o conceito de
O pipeline do PowerShell foi projetado especificamente para evitar loops que
exigir isso.
Não há loop implícito aqui, existem apenas dois programas, um gerando itens
que são manipulados pelo próximo no pipeline.