Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1407
  • Last Modified:

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.
0
fjkaykr11
Asked:
fjkaykr11
  • 5
  • 3
  • 2
  • +1
4 Solutions
 
QlemoC++ 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
 
tdlewisCommented:
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
How to Use the Help Bell

Need to boost the visibility of your question for solutions? Use the Experts Exchange Help Bell to confirm priority levels and contact subject-matter experts for question attention.  Check out this how-to article for more information.

 
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
 
tdlewisCommented:
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
 
tdlewisCommented:
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
 
QlemoC++ DeveloperCommented:
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

Featured Post

Ask an Anonymous Question!

Don't feel intimidated by what you don't know. Ask your question anonymously. It's easy! Learn more and upgrade.

  • 5
  • 3
  • 2
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now