Script em lote para excluir arquivos condicionalmente

1

Os proprietários do Nokia Lumia 1020 sabem que ele pode ser configurado para armazenar fotos capturadas em resolução máxima, mas as fotos de tamanho reduzido também são armazenadas. Eu gostaria de ter um script para excluir automaticamente todas as versões de baixa resolução.

Os nomes dos arquivos são os seguintes:

WP_20150303_17_20_38_Pro.jpg
WP_20150303_17_20_38_Pro__highres.jpg
WP_20150303_17_21_21_Pro.jpg
WP_20150303_17_21_21_Pro__highres.jpg
WP_20150303_17_21_32_Pro.jpg
WP_20150303_17_21_32_Pro__highres.jpg
WP_20150303_17_22_47_Pro.jpg
WP_20150303_17_22_47_Pro__highres.jpg
WP_20150303_17_28_14_Pro.jpg
WP_20150303_17_28_14_Pro__highres.jpg

Eu poderia excluir * _pro.jpg, mas há o risco de que, se não houver uma versão de alta resolução. Como posso escrever um script que primeiro verifique se há um arquivo highres presente e só então apague a versão de baixa resolução?

    
por Nano 03.03.2015 / 20:39

2 respostas

0

Crie um arquivo em lotes. Comece aqui: Comando Loop: contra os resultados de outro comando e aqui: Argumentos da linha de comando (Parâmetros)

For /F "tokens=*" %%G in ('dir /b *_pro.jpg') do (
   echo %%~dpnG
)

Agora você pode alterar echo %%~dpnG para

   if exist "%%~dpnG__highres.jpg" echo del "%%~dpnxG"

ou até mesmo para

   if exist "%%~dpnG__highres.jpg" (
        echo del "%%~dpnxG"
   ) else (
        echo retain %%~dpnxG
   )

Verifique cuidadosamente a saída (melhor duas vezes) e substitua echo del por del .

Adicione o comando /s ao comando dir da seguinte forma: dir /b /s *_pro.jpg para tratar os arquivos nas subpastas também.

    
por 03.03.2015 / 21:50
0

O arquivo .bat que eu uso:

    @Echo off
For /F "tokens=*" %%G in ('dir /s /b *_pro.jpg') do (
    if exist "%%~dpnG__highres.jpg" (
        echo delete %%~dpnxG
   ) else (
        echo retain %%~dpnxG
   )
)

Echo.
Echo _________________________________________________
Echo.

 Echo Do you really want to delete these files (Y/N)?
CHOICE /C YN /N 
IF ERRORLEVEL 2 goto doend
IF ERRORLEVEL 1 goto doerase
exit

:doerase
For /F "tokens=*" %%G in ('dir /s /b *_pro.jpg') do (
    if exist "%%~dpnG__highres.jpg" (
        del "%%~dpnxG"
   ) else (
        REM echo retain %%~dpnxG
   )
)

:doend
pause
    
por 18.11.2015 / 20:43