『第
3 楼』:
Quote: | Originally posted by jmz573515 at 2009-9-3 10:51:
这个用VBS更简单吧
for i=7 to 1 step -1
s = s & date-i & vbcrlf
next
msgbox s |
|
是上一周的7天,不是7天前。
不过这个确实不适合用批处理做:
因为用批处理做首先必须先处理如08,09这样的数字,否则会出现进制运算错误
然后计算上一周的周日的数字:
如果数值为负数,即从上一月开始计算。。。
上个月,也许就上到前一年了。。。
然后得按7月大,8月小计算每个月的月长。。。
然后再按是否是润年考虑2月的情况。。。
麻烦着呢,想着都头大。。。
@echo off&setlocal enabledelayedexpansion
echo 日期必须符合 2009-09-03 星期四 这类的格式
for /f "tokens=1-3 delims=-:/ " %%i in ("%date%") do set Xing1=%%i%%j%%k
:Hy
if "!Xing1:~%Gu1%,1!" neq "" set /a Gu1+=1 &goto Hy
if %Gu1% lss 8 (echo 日期格式错误 &pause &goto :eof)
:Gx
set /p Han1=要从周日作为一周开始,请键入7;要从周一开始,请键入1.然后按回车继续:
if "%Han1%" equ "7" set /a Xing3=3&goto :Hygx
if "%Han1%" equ "1" set /a Xing3=4&goto :Hygx
echo 键入错误,请按任意键重新开始
pause>nul
goto :Gx
:Hygx
set Han2=寒夜孤星日一二三四五六日
if %date:~8,1% equ 0 (set Ye1=%date:~9,1%) else set Ye1=%date:~8,2%
if %date:~5,1% equ 0 (set Ye2=%date:~6,1%) else set Ye2=%date:~5,2%
for /l %%i in (5,1,11) do if "!Han2:~%%i,1!" equ "%date:~13,1%" set /a Hanye1=%Ye1%-%%i+%Han1%-3
if %Hanye1% lss 1 (set /a Gu1=%Ye2%-1) else set Gu1=%Ye2%
if %Gu1% lss 1 (set /a Gu1=12,Guxing2=%date:~0,4%-1) else set /a Guxing2=%date:~0,4%
for %%a in (1:31 2:28 3:31 4:30 5:31 6:30 7:31 8:31 9:30 10:31 11:30 12:31) do for /f "tokens=1,2 delims=:" %%i in ("%%a") do if %Gu1% equ %%i set Xing1=%%j
set /a Guxing1=%Guxing2%%%4
if %Gu1% equ 2 if %Guxing1% equ 0 set Xing1=29
if %Gu1% lss 10 set Gu1=0%Gu1%&echo.&echo 今天是:&echo %date%&echo.&echo 上周是:
set /a Hanye2=%Hanye1%+6
for /l %%i in (%Hanye1%,1,%Hanye2%) do (
if %%i lss 1 (set /a Xing2=%Xing1%+%%i) else set /a Xing2=%%i
set /a Xing3+=1
set Xing2=0!Xing2!
if %%i lss 1 (call echo %Guxing2%-%Gu1%-!Xing2:~-2! 星期%%Han2:~!Xing3!,1%%) else call echo %date:~0,4%-%date:~5,2%-!Xing2:~-2! 星期%%Han2:~!Xing3!,1%%
)
pause>nul [ Last edited by Hanyeguxing on 2009-9-6 at 12:41 ]
|