2014-01-09 56 views
0

我是新手,在写剧本,但我知道这是可以做到我只是不知道我怎么....bat文件更改文件名少1一天,而不是当前的日期

有一个文件需要将文件NAME更改为当前日期少于1个工作日(例如:星期一返回星期五,星期二至星期一,并在日期前添加静态“AD”

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

我在有需要更改日期以及

文件名如不同的日期格式不同的文件夹类似的文件:PC010714.slb (星期二日期改为周三为止,PC010814.pos) 该文件位于:R:\ slwin \侦察调整

我想这两个文件的名称中使用相同的脚本

我知道DOS没有做很好平日改变,所以我可以使用一个单独的文件来处理星期一必要文件

+0

这真的不是重复的,因为它要求提前一周(周一至周五),无视周末(坐,太阳) – dbenham

+0

在每个位置是否只有该文件类型的一个文件?你不是真的想要周一或周五的名字,但日期格式如图所示,对吗?在批处理文件中,VBS是一个合理的工具吗?它内置于Windows中。 – foxidrive

回答

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,长度为%的子字符串将三个元素串在一起,其中位置0是(日期)字符串的开始。

我已经提名为destdirtargetdir这两个目录以适应我的系统。

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

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

这是基于保持按摩最后运行日期在yesterday.txt, which would need to be established first containing a single line 140107`或任何其他。如果你在midnight + alittle自动运行,仅周一至周五,它应该适当地重命名文件。

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

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 

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

相关问题