Ir ao conteúdo

Dúvida com script batch para renomear jpg


tfracon

Posts recomendados

Postado

Pessoal estou tentando desenvolver um script que mude o nome de arquivos jpg.

Meu cenário:

Tenho um equipamento médico que exporta o resultado para uma pasta no servidor. Esta pasta contém vários exames e para cada exame realizado ele exporta 2 arquivos: um em jpg e outro em csv com os seguintes nomes (exemplo):

2013-03-19_15-28-52_679.EM-3000.1.jpg

2013-03-19_15-28-52_679.EM-3000.csv

Este arquivo gerado em csv não é o padrão dividido por vírgulas ou ponto-e-virgula. Ele vem em linhas. Eis um pedaço dele:


[VER],1-04-04
[PT_ID],1234
[PT_NM],SMITH JOHN
[PT_SX],M
[PT_AG],
[PT_BIRTH],1946,6,7
[ST_DT],3/20/2013
[ST_TM],3:26:26 AM
[OP_ID],
[OP_NM],beth
[MC_NM],EM-3000
[MC_NO],0
[FM_NU],1
[FM_IF],SPECULAR,1-00-00
[FILES_N],4
[FILE],2013-03-19_15-28-52_679.EM-3000.1.jpg,COPY

O que eu tento fazer: acrescentar o dado PT_ID (1234 acima) e mudar o nome do jpg para 2013-03-19_15-28-52_679.EM-3000.1-1234.jpg. Observe que dentro do csv tenho na última linha a indicação deste jpg.

O que eu tenho até agora:


for /f "tokens=2 delims=," %%P in ('type *.csv ^| find "jpg,COPY"') do (
set jpg_file=%%~nP
)
for /f "tokens=2 delims=," %%I in ('type *.csv ^| find "[PT_ID]"') do (
set patient_id=%%I
)
ren %jpg_file%.jpg %jpg_file%-%patient_id%.jpg

O problema: com o script acima eu consigo listar cada jpg do diretório e cada PT_ID extraído de cada csv, mas o meu comando renomear só ocorre em um arquivo jpg (apesar de renomear corretamente).

Alguma dica?

Postado

tfracon,

Dê uma olhada. Em algumas situações (dentro de loops principalmente), você precisa lançar mão do Delayed Expansion de variáveis. Acho que essa parte está resolvida:

@echo off
SETLOCAL EnableDelayedExpansion

For /F %%i in ('dir /b *.csv') do (

for /f "tokens=2 delims=," %%P in ('type %%i ^| find "jpg,COPY"') do (
set jpg_file=%%~nP
)

for /f "tokens=2 delims=," %%I in ('type %%i ^| find "[PT_ID]"') do (
set patient_id=%%I
)

ren "!jpg_file!.jpg" "!jpg_file!-!patient_id!.jpg"
)

ENDLOCAL

A outra parte, você precisa inserir uma linha como esta "[PT_ID],1234" em cada .csv, é isso? Precisa ser na segunda linha? O valor é fixo?

Dependendo da situação, em CMD isso dever ser bem chatinho de fazer.. com o GNU sed isso seria uma delícia.

[]'s

LNW

  • Moderador
Postado

Caso o autor do tópico necessite, o mesmo será reaberto, para isso deverá entrar em contato com a moderação solicitando o desbloqueio.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!