Re-naming a file name to include yesterday's date using command prompt

匿名 (未验证) 提交于 2019-12-03 10:24:21

问题:

I am trying to rename some log files to yesterday's date when the batch file creates a new file of same name every night.

We can rename the file to today's date using the below cmd

ren SampleDTE.TXT SampleDTE-%date:~10,4%%date:~7,2%%date:~4,2%_%time:~0,2%%time:~3,2%.TXT 

This results in file renamed to // SampleDTE-YYYYDDMM_hhmm.TXT

SampleDTE-20132712_1243.TXT  

I wanted to know how to re-name the file to yesterday's date. Something like

 SampleDTE-20132612_1243.TXT 

Thanks in advance

回答1:

The easy way - assuming that you run this regularly, once per day

FOR /f %%a IN (sampledteyesterday.txt) DO ECHO ren SampleDTE.TXT SampleDTE-%%a_%time:~0,2%%time:~3,2%.txt > sampledteyesterday.txt ECHO %date:~10,4%%day%%date:~4,2% 

Note - ren command simply ECHOed. when verified, remove the ECHO keyword before the REN to activate.

You'll need to set up your sampledteyesterday.txt file containing a single line YYYYDDMM for yesterday to initialise.

Suggestion: use YYYYMMDD which sorts easier or more logically...



回答2:

You will have to use a variable and do the math:

set /a day=%date:~7,2% - 1 ren SampleDTE.TXT SampleDTE-%date:~10,4%%day%%date:~4,2%_%time:~0,2%%time:~3,2%.TXT 


回答3:

To avoid date arithmetics, you can store yesterday date in, eg, file.

yesterday.txt (contains today and yesterday):

20131227 20131226 

Batch file:

REM Get today (to check if yesterday.txt is valid): SET today=%DATE:~10,4%%DATE:~7,2%%DATE:~4,2% REM Read file: FOR /F "TOKENS=1,2" %%d IN (yesterday.txt) DO (     SET stored_today=%%d     SET yesterday=%%e ) REM If stored_today not equal to today, assume yesterday is stored_today and update file: IF NOT "%stored_today%" == "%today%" (     SET yesterday=%stored_today%     >yesterday.txt ECHO %stored_today% %today% ) REM Test if yesterday is set, exit otherwise. IF "%yesterday%"=="" ECHO Yesterday unknown! Try again tomorrow.&GOTO:EOF 

To make it work correctly first time, yesterday.txt must be manually filled.



回答4:

This will get yesterdays date, using VBS in a batch file.

It's reliable in all locales, whereas the %date% variable can be different on different computers, and different users.

@echo off set day=-1 echo >"%temp%\%~n0.vbs" s=DateAdd("d",%day%,now) : d=weekday(s) echo>>"%temp%\%~n0.vbs" WScript.Echo year(s)^& right(100+month(s),2)^& right(100+day(s),2) for /f %%a in ('cscript /nologo "%temp%\%~n0.vbs"') do set "result=%%a" del "%temp%\%~n0.vbs" set "YYYY=%result:~0,4%" set "MM=%result:~4,2%" set "DD=%result:~6,2%" set "date-yesterday=%yyyy%-%mm%-%dd%"  echo Yesterday was "%date-yesterday%" pause 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!