中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-12 10:01
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请问如何能输出上周7天对应的日期 查看 689 回复 5
楼 主 请问如何能输出上周7天对应的日期 发表于 2009-09-03 10:32 ·  中国 重庆 电信
新手上路
积分 6
发帖 4
注册 2009-04-16 00:43
17年会员
UID 143029
性别 男
状态 离线
比如今天是2009-9-3,那么上周7天的日期为:
2009-8-24
2009-8-25
……
2009-8-30
2 发表于 2009-09-03 10:51 ·  中国 辽宁 本溪 联通
银牌会员
★★★
积分 1,212
发帖 464
注册 2006-12-13 21:11
19年会员
UID 73417
性别 男
状态 离线
这个用VBS更简单吧

for i=7 to 1 step -1
s = s & date-i & vbcrlf
next
msgbox s
3 发表于 2009-09-03 11:26 ·  中国 吉林 延边朝鲜族自治州 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
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 ]
4 发表于 2009-09-04 01:40 ·  中国 陕西 安康 电信
初级用户
积分 58
发帖 29
注册 2008-08-15 19:21
17年会员
UID 123291
性别 男
状态 离线
呵呵,自己造的,大侠不要笑~~

dtmToday = Date()
DayOfWeek = DatePart("w", dtmToday)
i = DayOfWeek - 2
UpWeekLastDay = dtmToday - i
For a = 1 to 7
UpWeekEveryDay = UpWeekLastDay - a & chr(13) & UpWeekEveryDay
Next
Wscript.Echo UpWeekEveryDay
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
Hanyeguxing +4 2009-09-04 05:50
5 发表于 2009-09-04 05:50 ·  中国 吉林 延边朝鲜族自治州 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
这一点上,vbs就是比纯P好。。。
6 seem this is an easy way... 发表于 2009-09-04 12:58 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
startday = Date - (Weekday(Date) + 6)
For i = 1 To 7
UpWeekEveryDay = UpWeekEveryDay & startday + i & vbCrLf
Next
Wscript.Echo UpWeekEveryDay
S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
论坛跳转: