¿Cómo puedo hacer que ExifTool cambie el nombre por modelo de cámara cuando el nombre contiene una barra inclinada?

Uso ExifTool para renombrar por lotes todas mis imágenes usando los siguientes dos comandos:

"-FileName<${Exif:Model}-(%%f).%%e"
-d %%Y%%m%%d-%%H%%M%%S-%%%%f.%%%%e "-FileName<DateTimeOriginal"

Esto me da nombres de archivo como:

20110711-144637-DMC-FZ28-(P1020103).JPG

y

20110711-145144-iPhone 4-(IMG_1004).JPG

Me han enviado algunas fotos tomadas con un Samsung S860 que tiene una etiqueta de Modelo de<KENOX S860 / Samsung S860>

No estoy seguro de si es ExifTool (v8.60) en sí o el shell de comandos de Windows (7 de 64 bits) el que lo está haciendo, pero el primer comando lo trata /como un cambio de directorio y da un error al intentar ejecutar :

Warning: Error creating directory for '<KENOX S860  / Samsung S860>-(SDC12529).JPG' - D:/Users/xxx/Desktop/ExifProcess/SDC12529.JPG
Error creating directory <KENOX S860

¿Hay alguna forma de forzar a ExifTool a escapar del carácter de barra diagonal?

He probado las opciones -exy que codifican el y pero no el .-E<>/

¿Hay alguna forma de obligar a ExifTool a que no lo trate /como parte de la ruta?

A continuación se muestra el archivo completo process.batque uso:

@Echo Off
MD D:\Users\xxx\Desktop\ExifProcess
COPY D:\Users\xxx\Pictures\Import\*.jpg D:\Users\xxx\Desktop\ExifProcess
"P:\Program Files (x86)\ExifTool\exiftool.exe" "-FileName<${Exif:Model}-(%%f).%%e" D:\Users\xxx\Desktop\ExifProcess\*.jpg
"P:\Program Files (x86)\ExifTool\exiftool.exe" -d %%Y%%m%%d-%%H%%M%%S-%%%%f.%%%%e "-FileName<DateTimeOriginal" D:\Users\xxx\Desktop\ExifProcess\*.jpg
Pause
Considere el siguiente flujo de trabajo: (1.1) recorra la carpeta de fotos alfabéticamente (1.2) envíe cada foto Exif:Modela un archivo de texto (2) recorra el archivo de texto reemplazando /como por ejemplo -(3.1) recorra la carpeta de fotos alfabéticamente nuevamente (3.2) cambie el nombre de los archivos según el archivo de texto modificado
@koiyu: vea mi respuesta a continuación: lo mismo, pero no es necesario un archivo de texto intermedio (o dos pases).

Respuestas (5)

Aunque esto se ha preguntado hace algún tiempo, pero dado que ninguna respuesta está marcada como Respuesta, ofrezco esto.

Tal vez la solución sea usar el punto y coma detrás del modelo para eliminar los caracteres no válidos > modelo;

exiftool '-filename<%f_${model;}.%e' dir

Cambie el nombre de todos los archivos en dir agregando el nombre del modelo de la cámara al nombre del archivo. El punto y coma después del nombre de la etiqueta dentro de las llaves hace que los caracteres que no son válidos en los nombres de archivo de Windows se eliminen del valor de la etiqueta (consulte la "Función de formato avanzado" para obtener una explicación).

Fuente: documentación de ExifTool y esta pregunta

Usando exiftool, la respuesta es crear una etiqueta definida por el usuario basada en EXIF:Model que filtra los caracteres ofensivos. Esta pregunta se hace y responde en el foro de ExifTool:

http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,2961

He estado usando jheadpara esto desde antes de conocer esta característica de ExifTool, y lo que hago es simplemente usar un script de envoltura para

  1. extraer el nombre del modelo a una variable temporal
  2. munge el nombre usando un conjunto de reglas que he creado
  3. cambie el nombre usando esa variable en la línea de comando de shell en lugar de los códigos de cadena para la herramienta de cambio de nombre en sí

Esto es un poco torpe, pero bueno, los scripts de shell son para los errores en primer lugar, ¿verdad? Y tiene la ventaja de tratar con otros nombres de modelos raros como la serie "*ist" terriblemente etiquetada de Pentax. Y ya está utilizando un script por lotes. Solo pon un poco más de inteligencia en ese nivel.

Cierto, pero en realidad no es muy útil para los fotógrafos que usan Windows y que rara vez dominan las secuencias de comandos de Shell.
Tienen PowerShell, ¿verdad? No es tan aterrador. :)

Prueba esto:

exiftool '-FileName<${CreateDate}_${Exif:Model}.jpg' -d %Y%m%d_%H%M%S-%%2c *

o esto

exiftool '-FileName<${CreateDate}_${Exif:Model}_${filename}' -d %Y%m%d_%H%M%S *
¿Quizás podría agregar algún comentario para explicar cómo se le ocurrieron estos comandos y cuáles son las diferencias entre ellos?

Hasta ahora, la única respuesta que he encontrado es agregar

-overwrite_original_in_place -preserve "-Model=Samsung S860"

como la primera acción de ExifTool, pero esto obviamente cambia el archivo en sí, en lugar de solo el nombre del archivo.