Copiar-item excluindo pasta no PowerShell
-
Excluindo Pastas em Operações de Cópia do PowerShell Usando a Função
Get-Item
e o Parâmetro-Exclude
-
Excluindo Pastas em Operações de Cópia do PowerShell Usando
Where-Object
ePSIsContainer
- Conclusão

No âmbito da gestão de arquivos e automação usando PowerShell, a tarefa de copiar arquivos enquanto exclui pastas específicas é um desafio comum, mas sutil. Este artigo aborda dois métodos eficazes para realizar essa tarefa: usando a função Get-Item
com o parâmetro -Exclude
e aproveitando Where-Object
com a propriedade PSIsContainer
.
Ambos os métodos, embora sirvam ao mesmo propósito, abordam o problema de ângulos diferentes e oferecem vantagens únicas.
Nosso objetivo é fornecer uma compreensão abrangente desses métodos, suas aplicações e as nuances de seu uso. Através de explicações detalhadas, quebras de sintaxe e exemplos práticos, buscamos equipar tanto novos quanto experientes usuários de PowerShell com as habilidades para gerenciar tarefas de cópia de arquivos de forma eficiente, personalizando suas abordagens para atender às exigências específicas de seus fluxos de trabalho.
Excluindo Pastas em Operações de Cópia do PowerShell Usando a Função Get-Item
e o Parâmetro -Exclude
Podemos usar o comando Copy-Item
para copiar os arquivos enquanto excluímos uma pasta no PowerShell. Existem dois métodos para usar Copy-Item
enquanto excluímos uma pasta, um é excluir uma única pasta e o outro é excluir várias pastas.
A sintaxe para esta operação combina Copy-Item
com Get-Item -Exclude
:
Copy-Item -Path (Get-Item -Path "sourcePath\*" -Exclude ('folderToExclude')).FullName -Destination "destinationPath" -Recurse -Force
Parâmetros:
Copy-Item
: Este cmdlet copia arquivos e diretórios para um novo local.-Path
: Especifica o caminho dos itens a serem copiados. Em nosso caso, isso é fornecido peloGet-Item
.Get-Item
: Recupera os itens do local especificado.-Exclude
: Este parâmetro noGet-Item
filtra itens, especialmente os nomes de pastas ou arquivos a serem excluídos.('folderToExclude')
: O nome da pasta que você deseja excluir..FullName
: Recupera o caminho completo dos itens.-Destination
: O caminho para onde os itens devem ser copiados.-Recurse
: Inclui o conteúdo de subdiretórios.-Force
: Força o comando a ser executado sem perguntar por confirmação do usuário.
Exemplo de Código:
Copy-Item -Path (Get-Item -Path "origin\*" -Exclude ('SubFolder')).FullName -Destination "destination\" -Recurse -Force
Em nosso script, começamos direcionando o diretório de origem (C:\origin\
) e empregamos Get-Item
para recuperar todos os itens que contém. O uso do símbolo asterisco (*
) aqui atua como um curinga, representando cada item dentro do diretório.
Em seguida, aproveitamos o parâmetro -Exclude
para articular nossa intenção de excluir uma subpasta específica, notavelmente chamada SubFolder
. O uso da propriedade .FullName
é crítico neste contexto, pois busca o caminho completo para cada item com o qual estamos lidando.
Após curar esta lista, que omite a pasta designada, ela é entregue ao Copy-Item
. Prosseguimos para definir nosso local alvo como o diretório de destino (C:\destination
). Para garantir um processo de cópia abrangente, englobando todos os subdiretórios, exceto aquele que optamos por excluir, incorporamos o parâmetro -Recurse
.
Para suavizar ainda mais nosso processo e evitar interrupções potenciais, o parâmetro -Force
entra em cena. Ele efetivamente suprime quaisquer prompts do sistema que poderiam, de outra forma, pausar a operação, particularmente aqueles associados à sobrescrição de arquivos existentes no diretório de destino.
Pasta origin
:
Saída:
O comando acima apenas excluirá uma pasta específica. Também podemos excluir várias pastas apenas colocando os nomes das pastas múltiplas em -Exclude()
.
Veja o comando para excluir várias pastas:
Copy-Item -Path (Get-Item -Path "origin\*" -Exclude ('SubFolder', 'SubFolder2')).FullName -Destination "destination\" -Recurse -Force
Veja a saída:
Excluindo Pastas em Operações de Cópia do PowerShell Usando Where-Object
e PSIsContainer
PowerShell fornece um conjunto extenso de cmdlets para manipulação de arquivos e pastas, com Copy-Item
sendo um ator chave para operações de cópia. No entanto, sua funcionalidade nativa não suporta diretamente a exclusão de pastas.
Para alcançar isso, empregamos uma combinação de Get-ChildItem
, Where-Object
e a propriedade PSIsContainer
. Este método é particularmente útil para operações de cópia onde você precisa excluir diretórios enquanto preserva arquivos.
A estrutura do script é a seguinte:
Get-ChildItem -Path "sourcePath\" -Recurse | Where-Object { $_.PSIsContainer -notmatch 'True' } | Copy-Item -Destination "destinationPath" -Recurse -Container
Parâmetros:
Get-ChildItem -Path "sourcePath\" -Recurse
: Recupera todos os itens (arquivos e pastas) do caminho especificado, incluindo subdiretórios.Where-Object { $_.PSIsContainer -notmatch 'True' }
: Filtra todos os diretórios.PSIsContainer
é uma propriedade booleana que éTrue
para diretórios eFalse
para arquivos.Copy-Item -Destination "destinationPath" -Recurse -Container
: Copia os itens restantes (arquivos) para o destino.-Recurse
é usado para garantir a travessia de subdiretórios, e-Container
preserva a estrutura do diretório.
Exemplo de Código:
Get-ChildItem -Path "origin\" -Recurse | Where-Object { $_.PSIsContainer -notmatch 'True' } | Copy-Item -Destination "destination\" -Recurse -Container
Em nosso script, começamos coletando todos os itens do diretório de origem (origin\
). Para fazer isso, empregamos o cmdlet Get-ChildItem
.
A verdadeira mágica acontece com o cmdlet Where-Object
, onde introduzimos um filtro para excluir especificamente diretórios. Esta exclusão é baseada na condição $_ .PSIsContainer -notmatch 'True'
.
Este trecho de código é crucial, pois efetivamente peneira os itens coletados, garantindo que apenas arquivos (e não diretórios) sejam passados para o pipeline.
Em seguida, esses arquivos filtrados são entregues ao cmdlet Copy-Item
. Nosso comando aqui é copiar esses arquivos para nosso destino especificado (destination\
).
Um aspecto importante desta operação é como ela preserva a estrutura original do diretório no destino, apesar de excluir as próprias pastas. Esse equilíbrio é alcançado através da orquestração cuidadosa dos parâmetros -Recurse
e -Container
dentro do Copy-Item
, garantindo que a integridade da estrutura de arquivos seja mantida, menos as pastas reais.
Saída:
Conclusão
Em conclusão, as técnicas apresentadas neste artigo — usando Get-Item
com -Exclude
e Where-Object
com PSIsContainer
— oferecem maneiras poderosas e flexíveis de excluir pastas durante operações de cópia do PowerShell. Ao entender e aplicar esses métodos, os usuários podem melhorar significativamente suas capacidades de gestão de arquivos e automação no PowerShell.
A abordagem Get-Item
e -Exclude
é direta e altamente eficaz para excluir pastas específicas, enquanto os métodos Where-Object
e PSIsContainer
fornecem um controle mais sutil, especialmente útil em cenários onde os critérios de exclusão são mais complexos ou dinâmicos. Ambos os métodos demonstram a versatilidade e o poder do PowerShell em lidar com arquivos e diretórios, tornando-o uma ferramenta inestimável para administradores de sistemas, desenvolvedores e profissionais de TI.
Armados com esse conhecimento, os usuários podem abordar com confiança uma ampla gama de tarefas de cópia de arquivos, garantindo controle eficiente e preciso sobre suas operações de gestão de arquivos em ambientes Windows.
Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.
LinkedIn Facebook