“mid” like functionality in batch script
for awhile, i used for looping to do a lot of manipulation in batch scripts until i ran across this gem. a friend of mine asked me how to manipulate a date string awhile back. this is what i came up with.
let’s begin with the date /t command. running it gives us this output:
Fri 07/31/2009
most date formats with respect to dates in filenames generally don’t use “/” or include the short day name “fri”. my conventional method is to push this through a for loop and break out the thing into tokens. i’ve done this in below by utilizing “/” and “,” as the delimiters.
for /f "tokens=1,2,3,4 delims=/, " %a in ('date /t') do @echo %b%c%d
now we get this output when we echo %b%c%d.
07312009
the challenge i got was how to get the date to show up as 090731. if we tried to use “0” as a delimiter, it would clearly fail as 07 and 09 have zeroes in them. here’s an example:
for /f "tokens=1-5 delims=/,0 " %a in ('date /t') do @echo 0%e0%b%c
we get the output we want but only by forcing 0s into the echo statement. this can’t be a good idea because eventually the month will increment where there’s no 0 preceding it… like 10, 11, or 12. that’s when i found this other cool method.
for /f "tokens=1-2 delims= " %a in ('echo %date%') do @set mydate=%b
set mm=%mydate:~0,2%
set dd=%mydate:~3,2%
set yy=%mydate:~8,2%
now i can echo back the output as echo %yy%%mm%%dd% and achieve the result we expect.
090731
this is what i imagine the syntax to look like:
%[var]:~[1st position],[last position]%
incidentally, it accepts negative numbers as well. so, you could achieve the same effect using %mydate:~-2%. this is not the same as %mydate:~0,-2% by the way.
why batch files? i don’t know. i guess some people still like them. :)
Comments
Post a Comment