Copiar-item excluindo pasta no PowerShell

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

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 pelo Get-Item.
  • Get-Item: Recupera os itens do local especificado.
  • -Exclude: Este parâmetro no Get-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:

powershell copy-item excluir pasta - arquivos de origem

Saída:

powershell copiar-item excluir pasta - 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:

powershell copy-item excluir pasta - 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 e False 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:

powershell copy-item excluir pasta - 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.

Está gostando dos nossos tutoriais? Inscreva-se no DelftStack no YouTube para nos apoiar na criação de mais vídeos tutoriais de alta qualidade. Inscrever-se
Sheeraz Gul avatar Sheeraz Gul avatar

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