使用命令提示符重命名文件名以包含昨天的日期

时间:2013-12-27 07:34:06

标签: date batch-file cmd

我正在尝试将一些日志文件重命名为昨天批处理文件每晚创建一个同名新文件的日期。

我们可以使用以下cmd将文件重命名为今天的日期

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

这会导致文件重命名为// SampleDTE-YYYYDDMM_hhmm.TXT

SampleDTE-20132712_1243.TXT 

我想知道如何将文件重命名为昨天的日期。像

这样的东西
 SampleDTE-20132612_1243.TXT

提前致谢

4 个答案:

答案 0 :(得分:0)

您必须使用变量并进行数学运算:

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

答案 1 :(得分:0)

简单的方法 - 假设您每天定期运行一次

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%

注意 - ren命令只是ECHO ed。验证后,请在ECHO激活之前删除REN关键字。

您需要设置包含单行sampledteyesterday.txt的{​​{1}}文件,以便昨天初始化。

建议:使用YYYYDDMM可以更容易或更逻辑地进行排序......

答案 2 :(得分:0)

这将在昨天的日期,在批处理文件中使用VBS。

它在所有语言环境中都是可靠的,而%date%变量在不同的计算机和不同的用户上可能会有所不同。

@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

答案 3 :(得分:0)

为避免日期算术,您可以将昨天的日期存储在例如文件中。

yesterday.txt(包含今天和昨天):

20131227 20131226

批处理文件:

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

要使其第一次正常工作,必须手动填写yesterday.txt