下面的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”。如果您指定了这一点,我们可以完成解决方案。
这真的不是重复的,因为它要求提前一周(周一至周五),无视周末(坐,太阳) – dbenham
在每个位置是否只有该文件类型的一个文件?你不是真的想要周一或周五的名字,但日期格式如图所示,对吗?在批处理文件中,VBS是一个合理的工具吗?它内置于Windows中。 – foxidrive