I have a problem with the use of TAG= and TAG+= command line arguments using exiftool. At least I don't fully understand their use.
Let's make an example. Let's assume a JPEG file without any XMP tags.
First I create an initial set of xmp-lr:HierarchicalSubject tags:
exiftool -xmp-lr:HierarchicalSubject=AAA -xmp-lr:HierarchicalSubject=BBB
Now I wanna delete all old xmp-lr:HierarchicalSubject tags and replace them with a set of new one:
exiftool -xmp-lr:HierarchicalSubject= -xmp-lr:HierarchicalSubject+=CCC -xmp-lr:HierarchicalSubject+=DDD
But this doesn't work for me, as the tags AAA and BBB are not deleted.
If I do the following:
exiftool -xmp-lr:HierarchicalSubject= -xmp-lr:HierarchicalSubject=CCC -xmp-lr:HierarchicalSubject=DDD
then it works.
Of course I understand that I could use the last example. But in my code, I conditionally delete all tags and wanna add some more tags later. So in this case it would be fortunate optionally to use TAGS= to delete the tags and always use TAG+= to add the tags.
So what I'm doing wrong here? And what is possible? In general, for me it's not clear when to use TAG= and TAG+= to add tags.
Thanks,
Andreas
Hi Andreas,
This is a common source of confusion. FAQ number 17 (https://exiftool.org/faq.html#Q17) deals with list-type tags for this reason.
Most people get confused because they don't realize that += applies to keywords that already exist in the file, not to ones you are writing. So if you use +=, you are telling exiftool that you want to keep the existing values. In this context, "-keywords= -keywords+=value" makes no sense. If you just say "-keywords=one -keywords=two", then the existing keywords are deleted and replaced by "one" and "two". I know it isn't intuitive but I think it should provide the functionality you need.
Please let me know if you are still confused after reading this and FAQ 17.
- Phil
Hi Phil,
thanks, now it's clear what's going on and how it is implemented.
Yes, it's not intuitive due to the following reason: let's assume that a tag isn't present at all. When you then use TAG+=VALUE the tags gets created and VALUE will be the first element of the list. Any subsequent TAG+=VALUE will add the values to the list.
But when I first delete the complete TAG (list) with TAG= and the use TAG+=VALUE, the TAG list doesn't get deleted first, even though it's semantically the same like when the TAG isn't available right from the start.
Sure, I can program around this and I already did now, but it makes the code more complex because I need special cases for this. In my humble opinion, it would be nice if exiftool would do it. But maybe thereare good arguments why this is not possible that I don't know.
Maybe you wanna think about what could be done here. I think it wouldn't be a problem to change this behaviour as right now nobody will use "TAG= TAG+=" because this combination doesn't do anything intuitive.
Thanks,
Andreas
Hi Andreas,
Thanks for the suggestion, I'll think about this. But one thing I like about the current behaviour is that it errs towards the safer result of preserving existing values.
- Phil