Talvez você possa usar o comando forfiles :
forfiles /p "c:\test" /m "*.txt" /c "cmd /c del @file"
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.
Talvez você possa usar o comando forfiles :
forfiles /p "c:\test" /m "*.txt" /c "cmd /c del @file"
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.
Solução rápida, mas não responda diretamente à sua pergunta:
rename *.txt_* *.nodelete del *.txt rename *.nodelete *.txt_bakcup
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
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: