DOS comando para remover as cópias file_001. *, mas somente se o arquivo. * existir

1

Eu tenho uma árvore de diretórios contendo arquivos e, às vezes, uma cópia no mesmo local. Esta cópia é identificada por alguma string, por ex. _001 , anexado ao nome do arquivo original.

  • somefile.txt e
  • somefile_001.txt

Eu posso listar esses arquivos no prompt do DOS usando: dir /s *_001.*

ou

for /f "tokens=1,2 delims=_" %i in ('dir /s /b *_*.*') do echo %i_%j

Mas não sei se isso é possível, provavelmente usando o formato posterior, para verificar se o arquivo original existe e, nesse caso, excluir a cópia.

    
por mins 01.08.2014 / 16:19

1 resposta

2

Seu comando está bem próximo. Tente isto:

for %i in (*) do if exist "%~ni_001%~xi" echo del "%~ni_001%~xi"

Verifique algumas das declarações del resultantes para testar para provar que os arquivos corretos estão sendo excluídos, em seguida, remova o 'eco' para que a exclusão realmente aconteça. Ou redirecione a saída para um arquivo de del statements e verifique isso.

O material% ~ nex é explicado no final de um comando 'help for'.

EDIT: o% xi não precisa de um. na frente dele como o. faz parte da extensão retornada por% ~ xi. Corrigido.

EDIT2: Alterou 'del% i' para o formato atual, pois eu interpretei mal a pergunta original e achei que o arquivo verificado deveria ser excluído, não a cópia _001. Além disso, adicionou cotações para proteção de nomes de arquivos com espaços.

    
por 01.08.2014 / 16:27