Comando do MS-DOS para excluir todos os arquivos, exceto um


25

Existe um comando do MS-DOS que permita excluir todos os arquivos, exceto um?

Considere como um exemplo os seguintes arquivos:

a.001  
a.002  
a.003  
a.exe  
a.c  

Existe um comando para excluir todos os arquivos, exceto a.c?

Respostas:


36

Você pode usar os comandos fore ifpara fazer isso:

for %i in (*) do if not "%~i" == a.c del "%~i"

Isso passa pelo diretório atual e compara o nome de cada arquivo com um ac. Se não corresponder, o arquivo será excluído.


O +1 nunca pensou em usá-lo para uma simples exclusão ... Cargas de boas respostas aqui!
William Hilsum

4
@Wil, quando você começa a usar forregularmente, cria todos os tipos de cenários loucos para isso. :)
Kevin

4
@ Mike, você deseja algo como "para% i in (A: \ Some \ Path \ *) faça se não% ~ nxi == ac del% i" Observe que o caminho termina em * para obter os arquivos nessa pasta e que a comparação é contra% ~ nxi, o nome sem caminho. Para loops destrutivos como esse, é uma boa ideia fazer "for ... do echo% i" para ver quais arquivos serão afetados antes de executar o comando "for ... do if ... del% i".
Kevin

1
Melhor usodel "%i"
Mugen

1
Se você precisar que a IFdeclaração não diferencie maiúsculas de minúsculas, altere-a para IF /I.
jep 20/09/18

16

Você pode definir o arquivo como somente leitura antes de excluir tudo

attrib +r a.c
del *.*
attrib -r a.c

10

Não, não existe. Eu criava um diretório, copiava o arquivo importante para ele, apagava . e mova o arquivo de volta. Em seguida, exclua o arquivo temporário.

mkdir temp
move a.c temp
erase *.*
move temp\* .
rmdir temp

1
+1 em bruto e tecnicamente o ladrão @Feiht diz uma maneira melhor de fazê-lo (também deu +1 lá), mas, para velocidade, é assim que eu faria.
William Hilsum

3
FOR %f IN (*.*) DO IF NOT [%f]==[a.c] DEL /Q %f

1
que benefício são os []?
barlop

1
@ barlop: %fpode ter espaços no nome do arquivo.
Paradroid

@paradroid não, isso não vai ajudar por isso, se [4 r] == [4 r] eco igual eu já vi similar feito por alguns, como com. ao invés de []. Eu poderia adivinhar o porquê, mas eu prefiro ouvir isso de alguém que faz isso.
barlop 7/09/11

@ Barlop: Eu não tenho idéia do que você acabou de digitar lá, mas os colchetes funcionam como aspas.
Paradroid

@paradroid C: \> se [4 r] == [4 r] eco abc <ENTER> fornece o resultado "r] == [4 foi inesperado no momento." Enquanto C: \> se "4 r" == "4 r" echo abc fornece o resultado abc. Então, o que faz você pensar que eles funcionam como as aspas funcionariam? Mesmo C: \> se [ab] == [ab] echo abc <- não funcionar gera erro semelhante. b] == [a era inesperado no momento. Então, o que faz você pensar que eles funcionam como aspas?
barlop

1
FOR /F "tokens=1-4" %%a in ('dir /a:-d /b /s %app_path%^|find /v "%file%"') DO Del /q %%a %%b %%c %%d

Eu acho que isso provavelmente seria útil, se fosse explicado o que faz. Parece que ele atravessa uma árvore de pastas inteira, que é o que eu quero. %app_path%e %file%são a raiz da árvore a percorrer e o arquivo para evitar a exclusão, respectivamente. O que é ^e por que estamos passando quatro tokens por arquivo para o Delcomando?
LarsH

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.