| | Comments (2)

Well after beating my head against the brick wall known as Perl for weeks, I've given up and am going to use PHP. All I want to do is get the datestamp on a file and use it to rename the file to have the datestamp *in* the file. So rename DSC00001.JPG to 2004-04-28-DSC00001.JPG etc. The only way I could find to do this in perl (stat($file)) works perfectly on a *nix system, but not Win32. So I've gone with PHP, which works better when used with a webserver, but I'm sure I'll be able to beat it into submission and get it down to merely running a shortcut on my desktop.

I will also then be able to start figuring out my USA photos in earnest. I haven't wanted to touch the files and resize them until I had the datestamp situation sorted and the files renamed.


ding said:

i believe this is what exif is for

July 15, 2004 12:31 AM


Thomas Gemal said:

Something like this should do the job:

# =====================================================================
# Simple Perl tool to add date stamp to file name for JPG files
# (from digital camera).
# May need to change filename criteria for other digital pictures files
# Thomas Gemal
# June 1, 2005
# =====================================================================
use strict;

my $filename;
my $filename_new;
my $atime;
my $day;
my $month;
my $year;
my $cnt;

opendir(DIR, ".") or die "can't opendir";
while (defined($filename = readdir(DIR))) {
if ( (-f $filename) && # Must be a file (no directories)
($filename =~ /\.jpg$/i) && # Must end in jpg
($filename =~ /^IMG/i) ) { # Must start with IMG (prevents redo'ing files)

# Get Access Time (seems to be best time stamp for Windows systems)
$atime = (stat($filename))[9];
$day = (localtime($atime))[3];
$month = (localtime($atime))[4] + 1; # Offset by 1
$year = (localtime($atime))[5] + 1900 - 2000; # Offset by 1900. Only interested in last 2 digits

$filename_new = sprintf ("%02d%02d%02d_%s", $year,$month, $day, lc($filename) );
printf ("Renaming: %s %s\n", $filename, $filename_new);
rename ($filename, $filename_new);


printf ("Files renamed: %d\n", $cnt);

And if you want to run from Windows Explorer, just create a BAT file with something like:

June 2, 2005 2:33 PM


Leave a comment

Kazza's "Boring Life Of a Geek" aka BLOG

IT geek, originally from Sydney, moved to Canberra in 2007. Married to "the sweetie", aka Stu. Prolific photographer, Lego junkie and tropical fish keeper.

Kazza the Blank One home