batch file rename date

fjkaykr11
fjkaykr11 used Ask the Experts™
on
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.
Comment
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
Qlemo"Batchelor", Developer and EE Topic Advisor
Top Expert 2015
Commented:
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

Commented:
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
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

Fundamentals of JavaScript

Learn the fundamentals of the popular programming language JavaScript so that you can explore the realm of web development.

Author

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"

Author

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.
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

Author

Commented:
@tdlewis when I run the command date /T
I get:
 Wed 12/26/2012

Author

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
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

Author

Commented:
that worked, fantastic!. Thanks.

Commented:
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.
Qlemo"Batchelor", Developer and EE Topic Advisor
Top Expert 2015

Commented:
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

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial