Several years ago I developed a DOS Batch script that would make double-copies of images off flash media (for loss protection) and then file them to specific directories based on Year-Month-Day as well as prepending the camera model* to the file to ensure the filenames were unique. I was thinking of converting to PowerShell since there is a lot more capability there than Ye Olde DOS prompt.
First step, how do I get Meta data information from a raw camera file into PowerShell?
Well, a little reading and experimentation, and it becomes a rather short one-liner. This example uses the file 5D_IMG_9027.CR2 and assumes ExifTool is installed in the local directory:
$meta=([xml](.\exiftool.exe .\5D_IMG_9027.CR2 -X)).rdf.description
Here’s an example of some of the attributes after processing:
PS C:\pics> $meta=([xml](.\exiftool.exe .\5D_IMG_9027.CR2 -X)).rdf.description PS C:\pics> $meta | fl ISO,CanonModel,Lens,Aperture,ShutterSpeed ISO : {100, 100, 100} CanonModel : 5D Lens : 85.0 mm Aperture : 1.8 ShutterSpeed : 1/25
Now that is pretty awesome!
Note: If you’re looking to do this for a large number of files, I recommend using ExifTool’s batch mode and doing the conversion from XML once, instead of once for each file.
*This is actually accomplished with a bit of ExifTool programming… place this file in the same directory and it “exposes” a new variable called CanonModel:
# # .ExifTool_config # %Image::ExifTool::UserDefined = ( 'Image::ExifTool::Composite' => { CanonModel => { Require => { 0 => 'Model', }, ValueConv => 'length($val[0]) > 4 ? substr($val[0], rindex($val[0]," ")+1, 100) : undef', }, }, );
P.S. If you’re looking for less information than what ExifTool can provide, you can look into “new-object -com shell.application” or “[System.Windows.Media.Imaging.BitmapFrame]” but neither of those had the detail nor capability on CR2 or other raw files.