del * .txt também remove file.txt_backup

3

Imagine que temos o diretório c:\test com os seguintes arquivos:

first.txt
second.doc
third.txt
fourth.txt_bak

Desejo remover apenas txt arquivos, mas deixar doc e txtwhatever intocados.

Quando executo o comando del c:\test\*.txt , ele remove tudo, exceto o segundo arquivo.

Alguma idéia de como corrigir isso para remover somente txt arquivos?

Editar : não tenho ideia de como o cliente nomeará seus arquivos. O sufixo pode ser qualquer coisa, não apenas txt_something . Pode ser também txtsomething , txt-something e assim por diante ...

Também não consigo instalar nenhum binários no servidor, só posso usar os binários padrão.

    
por Artur Iwan 18.07.2014 / 10:15

5 respostas

4

Talvez você possa usar o comando forfiles :

forfiles /p "c:\test" /m "*.txt" /c "cmd /c del @file"
    
por 18.07.2014 / 14:49
1

Baseado na ideia de fquinto, mas mais robusto:

mkdir FilesToSave.AEEC869E-A480-4459-84AE-B20D47A967BC
move *.txt?* FilesToSave.AEEC869E-A480-4459-84AE-B20D47A967BC
del *.txt
move FilesToSave.AEEC869E-A480-4459-84AE-B20D47A967BC\*.* .
rmdir FilesToSave.AEEC869E-A480-4459-84AE-B20D47A967BC

O curinga *.txt?* move todos os arquivos com uma extensão de mais de 3 caracteres, começando com * .txt para um diretório temporário. Estes são os arquivos cujos nomes 8.3 terminam em .txt. Portanto, na linha 3, você exclui apenas arquivos cuja extensão verdadeira é .txt e, na linha 4, restaura os arquivos que teriam sido excluídos acidentalmente.

O GUID está lá para tornar a pasta temp única.

    
por 18.07.2014 / 16:39
0

Solução rápida, mas não responda diretamente à sua pergunta:

rename *.txt_* *.nodelete
del *.txt
rename *.nodelete *.txt_bakcup
    
por 18.07.2014 / 10:32
0

Eu sei que não estou respondendo a pergunta do jeito que você quer, mas ... ... se você pode usar o PowerShell, o Remove-Item do cmdlet faz o que você precisa.

Remove-Item *.txt

Saudações

Alex Rouge

    
por 18.07.2014 / 11:13
-1

Se eu estou acertando seu problema do que isso pode ser útil:

@echo off
setlocal EnableDelayedExpansion
set exclude=.log.sdb.sdk.bat.
for %%f in (*.*) do (
   if /I "%exclude%" == "!exclude:%%~Xf.=!" del "%%f"
)

OR

@echo off
forfiles /c "cmd /c if @isdir equ FALSE if /i not @ext==\"sdb\" if /i not @ext==\"sbk\" if /i not @ext==\"log\" if /i not @ext==\"bat\" del @file"

Para uso de referência:

link

    
por 18.07.2014 / 14:55