Re-naming a file name to include yesterday's d

2019-06-09 11:05发布

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

4条回答
我只想做你的唯一
2楼-- · 2019-06-09 11:07

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

查看更多
男人必须洒脱
3楼-- · 2019-06-09 11:07

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楼-- · 2019-06-09 11:18

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
查看更多
我想做一个坏孩纸
5楼-- · 2019-06-09 11:29

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
查看更多
登录 后发表回答