.bat文件将文件名更改为比当前日期少1天

时间:2014-01-09 22:47:29

标签: batch-file

我是编写脚本的新手,但我知道这可以做到我只是不知道如何......

我有一个文件,需要将文件名称更改为当前日期减去1个工作日(例如:星期一日期星期五,星期二到星期一,日期前置为静态“AD”

文件名示例:AD140107.pos (星期二的日期改为星期三,AD140108.pos) 该文件位于:R:\ PortfolioCenter \ Output \ Manual Interface Files

我在不同的文件夹中有一个类似的文件,它具有不同的日期格式,需要更改日期

文件名示例:PC010714.slb (星期二的日期改为星期三,PC010814.pos) 该文件位于:R:\ slwin \ Recon adjustment

我希望使用相同的脚本更改两个文件名

我知道DOS不会在工作日做好,所以我可以使用单独的文件处理星期一文件,如果有必要的话

2 个答案:

答案 0 :(得分:0)

@ECHO OFF
SETLOCAL
SET "destdir=c:\destdir"
SET "targetdir=c:\destdir"
SET today=%date:~-2%%date:~3,2%%date:~0,2%
FOR /f "delims=" %%a IN (yesterday.txt) DO SET yesterday=%%a
IF %yesterday%==%today% GOTO :EOF
>yesterday.txt ECHO %today%
ECHO REN "%destdir%\AD%today%.pos" "AD%yesterday%.pos"
SET today=%today:~-4%%today:~0,2%
SET yesterday=%yesterday:~-4%%yesterday:~0,2%
ECHO REN "%targetdir%\PC%today%.slb" "PC%yesterday%.slb"

GOTO :EOF

我使用dd/mm/yyyy的日期格式。您的可能会有所不同,因此您需要以不同方式重新格式化日期。基本方法是使用%date:startpos,length%的子字符串将三个元素串在一起,其中position 0是(date)字符串的开头。

我已将这两个目录命名为destdirtargetdir以适合我的系统。

关于什么名称改变为什么的问题存在一些混淆。从当前日期更改为前一天的日期似乎更明智,但这不是叙述所描述的内容。

我假设你每天只运行一次。

这一切都是基于将按摩的最后运行日期保持在yesterday.txt, which would need to be established first containing a single line 140107`或其他任何情况。如果您在午夜自动运行此类运行+仅限Mon-Fri,它应该适当地重命名文件。

所需命令仅用于ECHO以用于测试目的。在您确认命令正确无误后,将ECHO REN更改为REN以实际重命名文件。

答案 1 :(得分:0)

下面的Batch子程序获取当前日期减去一天的周中日期,并以其参数给出的格式显示:如果是Y,则输出格式为YYMMDD,否则为MMDDYY。此例程解决了请求的主要部分。

@echo off
setlocal

rem If Format=Y, output is YYMMDD
rem If Format=M, output is MMDDYY

:OneMidweekDayLessCurrentDate format

rem Modify next line accordingly to your locale format (this one use DD/MM/YYYY)
for /F "tokens=1-3 delims=/" %%a in ("%date%") do set /A dd=1%%a-100, mm=1%%b-100, yyyy=%%c

rem Convert the Date minus one day to Julian Day Number, and get its Day Of Week (0=Sunday, ..., 6=Saturday)
set /A a=(mm-14)/12, jdn=(1461*(yyyy+4800+a))/4+(367*(mm-2-12*a))/12-(3*((yyyy+4900+a)/100))/4+dd-32076, dow=jdn%%7

rem If the dow is Sunday or Saturday, change it by the previous Monday
if %dow% equ 0 (
   set /A jdn-=2
) else if %dow% equ 6 (
   set /A jdn-=1
)

rem Convert the Julian Day Number back to date
set /A l=jdn+68569,n=(4*l)/146097,l=l-(146097*n+3)/4,i=(4000*(l+1))/1461001,l=l-(1461*i)/4+31,j=(80*l)/2447
set /A dd=l-(2447*j)/80,l=j/11,mm=j+2-(12*l),yyyy=100*(n-49)+i+l
if %dd% lss 10 set dd=0%dd%
if %mm% lss 10 set mm=0%mm%

rem Show the resulting date
if "%1" equ "Y" (
   echo %yyyy:~-2%%mm%%dd%
) else (
    echo %mm%%dd%%yyyy:~-2%
)
exit /B

另一方面,您没有指定哪个文件是要重命名的文件:“我有一个文件需要更改文件NAME ...文件名示例:AD140107.pos” 。如果您指定此点,我们可以完成解决方案。