How do %$ and $* differ?

Dec 7, 2009
238
2
Left Coast, USA
TCC 20.00.14 x64 Windows 10 [Version 6.3.16299]

I have been struggling a bit with the command-line tool Exiftool, a popular program that reads and writes EXIF and IPTC data from/to image files. The program has had some trials and tribulations under Windows 10 but the latest version now runs on my machine.

I launch it via batch file this way:

c:\apps\exiftool\exiftool.exe %$

With arguments that tell it to read data from a JPEG or other image file, the program works fine.

With arguments that tell it to write new EXIF or IPTC data to a file, though, it fails with error messages indicating that I'd made errors in its command line (I hadn't).

I tried quoting %$ within the batch file and got other kinds of errors, also indicating errors in the Exiftool command line.

Then I decided to try using the parameter %* instead of %$ in the batch file — and the "write" features now work.

What might TCC be passing via %$ or "%$" that's different from what it passes via %*?

If it matters: when I set it up to run as an alias, this way:

alias exiftool `c:\apps\exiftool\exiftool.exe %$`

... the %$ parameter worked just fine.
 
Dec 7, 2009
238
2
Left Coast, USA
The command tail passed to the .btm file was the same in both cases:

–keywords=EXIF –keywords=editor filename.jpg

It worked with %* and not with %$. These arguments seem pretty harmless, but is there anything in there that might cause %$ to pass something different from the above string, verbatim? (I used EN dashes above just to make the hyphens stand out. In the actual command they were regular hyphens.)
 

rconn

Administrator
Staff member
May 14, 2008
12,556
167
The problem is with the = character, which is considered an argument delimiter in TCC (and CMD).

So a %$ is interpreted as:

–keywords EXIF –keywords editor filename.jpg

while a %* is interpreted as:

–keywords=EXIF –keywords=editor filename.jpg
 
Dec 7, 2009
238
2
Left Coast, USA
Would a setdos /x (some argument here) command have helped? I'm not sweating this now that I have an easy workaround, but it'd be good to know if there are other workarounds as well. Thanks.