getting the current date in a particular format in Windows XP/2003
I needed to get the current date, in the format ‘yyyy-MM-dd’, and use that value multiple times within a batch file.
The command ‘DATE /T’ returns a date like this:
Tue 06/20/2006
But I needed:
2006-06-20
Now, this would have been extraordinarily easy, if I could use 4nt, cygwin, nclip, or any number of other tools. However, my options were limited on the machine that I needed to run this on, as it is a production web application server. So, I had to come up with a way to do this using the tools I had available to me:
- Windows 2003 Server (assumed to be a default installation, or more minimal than that)
- Sybase ASE 12.5.x
- Java
I probably could have just written a simple java application to do this, but where’s the fun in THAT? :)
So, I consulted with my good friend, Jeff Scanlon, as I usually do when I have an interesting tech challenge, and together we came up with this batch file [NOTE: you can download it here, if the code gets too munged with the blogger html/css]:
—— BEGIN BATCH FILE ——-
@echo off
REM generate SQL script to get date in correct format:
echo select ’set my_date=’ + str_replace(convert(char(20),getdate(),102),’.',’-') >%TEMP%\getDate_yyyy-MM-dd.sql
echo go >>%TEMP%\getDate_yyyy-MM-dd.sql
REM run the SQL script to generate a simple, temporary batch file:
isql -U username -P password -i %TEMP%\getDate_yyyy-MM-dd.sql | findstr set >%TEMP%\set_my_date.bat
REM run the temporary batch file, which will set an environment variable, ‘MY_DATE’, to contain the date:
call %TEMP%\set_my_date.bat
REM clean up
del /q %TEMP%\set_my_date.bat
del /q %TEMP%\getDate_yyyy-MM-dd.sql
REM this is where you’d actually put code that uses the date, like:
REM md c:\backup\%MY_DATE%
REM copy c:\mystuff\*.* c:\backup\%MY_DATE%
—— END BATCH FILE ——-


June 20th, 2006 at 8:15 pm
(2 lines)
FOR /F “DELIMS=” %%A IN (’DATE /T’) DO SET CURRENT_DATE=%%A
SET MY_DATE=%CURRENT_DATE:~10,4%-%CURRENT_DATE:~4,2%-%CURRENT_DATE:~7,2%
See http://www.robvanderwoude.com/ for more batch goodness.
June 20th, 2006 at 8:17 pm
(1 line, if DATE is already set by OS.)
SET MY_DATE=%DATE:~10,4%-%DATE:~4,2%-%DATE:~7,2%
August 15th, 2006 at 1:29 pm
damn! Looks like you got 1-upped?