Exclui o conteúdo de várias pastas, exceto os arquivos especificados?

0

Como excluo o conteúdo de várias pastas, exceto arquivos específicos?

Por exemplo, tenho várias pastas que contêm os mesmos arquivos, conforme abaixo:

Pasta1:

  • Arquivo1
  • Arquivo2
  • File3

Pasta2

  • Arquivo1
  • Arquivo2
  • File3

Pasta3

  • Arquivo1
  • Arquivo2
  • File3

Etc.

Eu quero excluir todos os arquivos de cada pasta, exceto para Arquivo1 e Arquivo3. Posso fazer isso com o Powershell?

EDIT 1

Obrigado Crom! Caras, vocês são incríveis!! Descobrimos como excluir os arquivos. No entanto, esqueci de mencionar que preciso excluir outras pastas também.

Por exemplo, aqui está a aparência da minha estrutura de pastas.

C:\Users\myname\Desktop\project1\english\folder1\file1
C:\Users\myname\Desktop\project1\english\folder1\file2
C:\Users\myname\Desktop\project1\english\folder1\file3
C:\Users\myname\Desktop\project1\english\folder2\file4
C:\Users\myname\Desktop\project1\english\folder2\file5

C:\Users\myname\Desktop\project1\chinese\folder1\file1
C:\Users\myname\Desktop\project1\chinese\folder1\file2
C:\Users\myname\Desktop\project1\chinese\folder1\file2
C:\Users\myname\Desktop\project1\chinese\folder2\file4
C:\Users\myname\Desktop\project1\chinese\folder2\file5

Objetivo: excluir tudo, exceto o seguinte:

C:\Users\myname\Desktop\project1\english\folder1\file1
C:\Users\myname\Desktop\project1\chinese\folder1\file1
    
por xupeikai 07.01.2013 / 05:39

5 respostas

1

Você pode fazer algo assim no PowerShell:

$toKeep = "File1", "File3"
gci startFolder -Recurse | ? { !$_.PSIsContainer } | ? { $toKeep -notcontains $_.Name } | remove-item -WhatIf

Remova o -WhatIf quando estiver satisfeito, ele fará o que quiser.

    
por 07.01.2013 / 06:50
0

Você pode fazer isso fazendo os arquivos que deseja manter ocultos, aqui estão alguns comandos que encontrei on-line:
Via CMD tente isto:

for /f "delims=" %i in ('dir "My Dir\*.log" /b /s') do attrib +h "%i"
for /f "delims=" %i in ('dir "My Dir" /b /s') do del "%i" /q rmdir /s for /f "delims=" %i in ('dir "My Dir" /b /s /ah') do attrib -h "%i"

Primeiro, como faz com que os arquivos que você deseja manter, oculto (em vez de * .log, use os nomes dos seus arquivos).
Segunda linha excluir todos os arquivos em 'Meu Dir'.
Em seguida, remova o atributo oculto dos arquivos específicos.
Eu tentei eu mesmo e funciona.

Boa sorte.

    
por 07.01.2013 / 06:45
0
@ECHO OFF
FOR /D %%X IN (*.*) DO CALL :loopbody "%%X"
REM Don't "fall through" to :loopbody.
GOTO :EOF

:loopbody
ATTRIB +r +s %1\file1.ext
ATTRIB +r +s %1\file3.ext
DEL %1\*.*
ATTRIB -r -s %1\file1.ext
ATTRIB -r -s %1\file3.ext
GOTO :EOF

Em linguagem humana:
para cada um dos subdiretórios (na pasta onde você chama este batchscript) faça os comandos em loopbody:
O loopbody define os arquivos como readonly e system,
em seguida, exclui tudo (que não é somente leitura e sistema),
e finalmente redefinir os atributos nos arquivos.

    
por 07.01.2013 / 07:11
0

Ok, provavelmente não exatamente o que você está procurando (um software, GUI, opção rápida e fácil), mas isso definitivamente pode funcionar: programação simples.

Como a única linguagem de programação que conheço agora que permite isso é o PHP, eu configuraria um servidor Web virtual com o WAMP e, quando estivesse on-line, eu procuraria o "localhost" com meu navegador, depois cliquei caminho até um arquivo PHP Eu teria colocado em C: \ wamp \ www [\ pasta opcional para manter as coisas limpas \ file.php].

Aw bem, vamos embora. Se você não encontrar nada mais conveniente, você pode usar o código que eu vou fazer com você, o que provavelmente funcionará. Provavelmente. Melhor testá-lo em algo inofensivo primeiro.

Se você receber um erro de permissão, porque o servidor virtual está jogando fora do playground, será necessário colocar as pastas nas quais deseja excluir os arquivos na pasta www. Ou você pode tentar executar wamp como administrador ou algo assim.

link

Tente isso. (Gosh, eu com certeza amo perder meu tempo hoje à noite. Não como se eu tivesse outro trabalho urgente a fazer ... > _ > Estúpido comigo.)

    
por 07.01.2013 / 07:28