batch file rename date

On Windows Server 2003
The following batch file below will rename a file called: filename.txt
to filenameDate.txt
*where date = todays date and is displayed as
    MMDDYYYY (MM=Month DD = Day YYYY = year)

::BATCH FILE
@echo off
set today=%date:~4%
for %%a in ("filename.txt") do ren "%%~a" "%%~na%today:/=%%%~xa"
::END BATCH

The batch file runs daily and will always rename the file to the today's date.
I need to display the date as YYYYMMDD  (year month day)  instead of MMDDYYYY.
so the file will be renamed filenameYYYYMMDD.txt.   Any ideas on how to do this?  Thanks.
LVL 3
fjkaykr11Asked:
Who is Participating?

[Webinar] Streamline your web hosting managementRegister Today

x
 
tdlewisConnect With a Mentor Commented:
Replace your "set today" statement with these:
for /f "tokens=2-4 delims=/ " %%a in ('date /T') do set year=%%c
for /f "tokens=2-4 delims=/ " %%a in ('date /T') do set month=%%a
for /f "tokens=2-4 delims=/ " %%a in ('date /T') do set day=%%b
set today=%year%%month%%day%

Open in new window

0
 
QlemoConnect With a Mentor DeveloperCommented:
You will have to split the date into its parts, and then join in the proper sequence.
@echo off
REM %date% is ddd, mm/dd/yyyy
set yyyymmdd=%date:~-4%%date:~-10,2%%date:~-7,2%
for %%a in ("filename.txt") do ren "%%~a" "%%~na%yyyymmdd%%~xa"

Open in new window

0
 
Steve KnightIT ConsultancyCommented:
I can't post a link at the mo. Because on mobile but I have written an article here on how to do such things.   Using %date%a variable is pretty unreliable as the date format can be all sorts of things, and at the moment your says to take 4 chars off the beginning and then change any /adding chars to -.  It wont add 0's when it is 1 March say and if the date doesnt have week day at start more issues...

So personally I nearly always use a one line vbscript in the batch file.  Really easy to do and 100% reliable as VBscript does dates natively.

If you click on my dragon-it link you should be able to see the article details.  There are examples in there to get you any date and time format you want.

Steve
0
[Webinar] Improve your customer journey

A positive customer journey is important in attracting and retaining business. To improve this experience, you can use Google Maps APIs to increase checkout conversions, boost user engagement, and optimize order fulfillment. Learn how in this webinar presented by Dito.

 
fjkaykr11Author Commented:
@qlemo.  I get an error when trying to run your batch file:
error:
The following usage of the path operator in batch-parameter
substitution is invalid: %~xa"
0
 
fjkaykr11Author Commented:
@TDLewis.  Thanks for  your reply. When I try your method:

@echo off
set today=for /f "tokens=2-4 delims=/ " %%a in ('date /T') do set year=%%c
for /f "tokens=2-4 delims=/ " %%a in ('date /T') do set month=%%a
for /f "tokens=2-4 delims=/ " %%a in ('date /T') do set day=%%b
set today=%year%%month%%day%
for %%a in ("filename.txt.txt") do ren "%%~a" "%%~na%today:/=%%%~xa"

The file gets renamed but not with the year.  I get the following
filename1226.txt    I need it to be renamed to filename20121226.txt for today's date.
0
 
tdlewisConnect With a Mentor Commented:
Execute the command "date /T" and tell me what you get as output. Also, put these four lines after "set today" and tell me what you get as output:
echo year: %year%
echo month: %month%
echo day: %day%
echo today: %today%

Open in new window

0
 
fjkaykr11Author Commented:
@tdlewis when I run the command date /T
I get:
 Wed 12/26/2012
0
 
fjkaykr11Author Commented:
@tdlewis:  
When I add the four lines in to the batch file:
echo year: %year%
echo month: %month%
echo day: %day%
echo today: %today%

I get back
year:
month: 12
today: 1226
0
 
tdlewisConnect With a Mentor Commented:
I see the problem. Replace this line:
set today=for /f "tokens=2-4 delims=/ " %%a in ('date /T') do set year=%%c
with
for /f "tokens=2-4 delims=/ " %%a in ('date /T') do set year=%%c

Open in new window

0
 
fjkaykr11Author Commented:
that worked, fantastic!. Thanks.
0
 
Steve KnightIT ConsultancyCommented:
You see my point then perhaps about why not to use date /T or %date% .... different machine, different user, language, date format (ddd dd/mm/yyyy, mm/dd/yyyy etc. And it breaks.
0
 
QlemoDeveloperCommented:
Dragon is correct about the fragile usage of %date% and date /t. In a restricted environment it works as expected, but it might not work on other machines.

My code was only missing one out of 3 percent signs:
@echo off
REM %date% is ddd, mm/dd/yyyy
set yyyymmdd=%date:~-4%%date:~-10,2%%date:~-7,2%
for %%a in ("filename.txt") do ren "%%~a" "%%~na%yyyymmdd%%%~xa"

Open in new window

0
All Courses

From novice to tech pro — start learning today.