[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[数值计算] 批处理获取N天后的星期

获取N天后的星期
比如今天是星期四 输入 2  则显示  2天前是星期二
输入 -2  则显示 2天后是 星期六

用纯p解决。

[ 本帖最后由 随风 于 2008-10-16 21:51 编辑 ]
技术问题请到论坛发帖求助!

一个链环~ 让我想起约瑟夫环的问题。
心绪平和,眼藏静谧。

TOP

此题应该不难,关键是思路。。
技术问题请到论坛发帖求助!

TOP

是不难,故先不做答,期待新人的表现。
***共同提高***

TOP

先来抛砖:
  1. @echo off
  2. :loop
  3. cls&setlocal enabledelayedexpansion
  4. for %%a in (一 二 三 四 五 六 天) do set/a n+=1&set ".!n!=%%a"
  5. set /p var=几天前/后?
  6. set/a s=var, x=4
  7. set/a var%%=7
  8. if "%var:~,1%" equ "-" (
  9.    set "op=+"&set "str=后"
  10.    set /a m=8,y=1
  11.    ) else (
  12.    set "op=-"&set "str=前"
  13.    set /a m=0,y=7
  14. )
  15. for /l %%a in (1 1 %var:-=%) do (
  16.       set/a x%op%=1
  17.       if !x! equ %m% set x=%y%
  18. )
  19. echo %s:-=% 天%str%是星期!.%x%!
  20. endlocal
  21. pause>nul&goto loop
复制代码

[ 本帖最后由 pusofalse 于 2008-10-16 21:57 编辑 ]
1

评分人数

心绪平和,眼藏静谧。

TOP

不是纯P的,在联盟我曾回复过此类日期的计算贴,本想集中到某个贴子中,只是太忙了....
  1. @echo off
  2. >星期计算.vbs Echo  aDate = InputBox("请输入一个日期:", "BY: fastslz",date)
  3. >>星期计算.vbs Echo  Wscript.Echo WeekDayName(DatePart("w", aDate))
  4. for /f "delims=" %%i in ('cscript.exe //nologo 星期计算.vbs') do set aDate=%%i&del 星期计算.vbs
  5. Echo %aDate%
  6. pause
复制代码

  1. @echo off
  2. >星期计算.vbs Echo  a = InputBox("计算昨天请输入-1,明天输入1,后天输入2,以此类推:", "BY: fastslz")
  3. >>星期计算.vbs Echo  aDate=FormatDateTime (DateAdd("d", a ,Date),2)
  4. >>星期计算.vbs Echo  Wscript.Echo WeekDayName(DatePart("w", aDate))
  5. for /f "delims=" %%i in ('cscript.exe //nologo 星期计算.vbs') do set aDate=%%i&del 星期计算.vbs
  6. Echo %aDate%
  7. pause
复制代码

  1. @echo off
  2. >周计算.vbs Echo  aDate = InputBox("请输入一个日期:", "BY: fastslz",date)
  3. >>周计算.vbs Echo Wscript.Echo  "0" ^&Right(Year(aDate) ,1)^&"年"  ^& DatePart("ww", aDate)^&"周"
  4. for /f "delims=" %%i in ('cscript.exe //nologo 周计算.vbs') do set aDate=%%i&del 周计算.vbs
  5. Echo %aDate%
  6. pause
复制代码

  1. @echo off
  2. >天计算.vbs Echo  aDate = InputBox("请输入一个日期:", "BY: fastslz",date)
  3. >>天计算.vbs Echo Wscript.Echo Year(aDate) ^&"年第" ^& DatePart("y", aDate) ^& "天"
  4. for /f "delims=" %%i in ('cscript.exe //nologo 天计算.vbs') do set aDate=%%i&del 天计算.vbs
  5. Echo %aDate%
  6. pause
复制代码

TOP

用vbs就太简单了,要求是用纯p
pusofalse 的代码能达到要求,但效率有待提高,试试输入 100000 看看。。
另:不必输入今天是星期几,就以当前星期为准就好了。。

[ 本帖最后由 随风 于 2008-10-16 21:52 编辑 ]
技术问题请到论坛发帖求助!

TOP

回复 7楼 的帖子

回随风兄,代码已经修改~
心绪平和,眼藏静谧。

TOP

代码也太不修饰了吧?
几天前/后? -10000
4 天后是星期一
技术问题请到论坛发帖求助!

TOP

回复 9楼 的帖子

时间差问题,我修改了两次代码,第一次修改时,你在测试我第一次贴出的未修改的代码,存在效率问题。第二次修改时你在测试我修改一次后的代码。现在修改好了。
心绪平和,眼藏静谧。

TOP

  1. @echo off
  2. :loop
  3. cls&setlocal enabledelayedexpansion
  4. for %%a in (一 二 三 四 五 六 天) do (set /a n+=1 & set ".!n!=%%a" & if "%date:~-1%"=="%%a" set x=!n!)
  5. if not defined x set /a x=4   &rem 如果%date%不包含星期,而今天是星期四,所以令x=4
  6. set /p var=几天前或几天后(前加-)?
  7. set /a "s=((var+x)%%7-7)%%7+7"   &rem 确保s∈[1-7]
  8. if "%var:~,1%" equ "-" (set "str=前") else set "str=后"
  9. echo %var:-=% 天%str%是星期!.%s%!
  10. endlocal&echo.&pause&goto loop
复制代码

[ 本帖最后由 zqz0012005 于 2008-10-17 00:13 编辑 ]
1

评分人数

命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

各位的思路比我的清晰多了。。。
代码也比我的简洁多了。。。惭愧。!
  1. @echo off&setlocal enabledelayedexpansion
  2. set "str=日六五四三二一"
  3. set /p day=请指定要追溯的天数:&cls
  4. for /f "tokens=4 delims=:\/- " %%a in ("%date%") do set "xq=%%a"
  5. set /a tian=day&set m=前
  6. if %day% lss 0 (
  7.    set "str=一二三四五六日"
  8.    set /a tian=~day+1&set m=后
  9. )
  10. for /l %%a in (0 1 6) do (
  11.    if not "!str:~0,1!"=="!xq:~-1!" set "str=!str:~1!!str:~0,1!"
  12. )
  13. set /a tian=tian%%7
  14. for /l %%a in (1 1 %tian%) do set "str=!str:~1!!str:~0,1!"
  15. echo %day:-=%天%m%是 星期!str:~0,1!
  16. pause
复制代码
技术问题请到论坛发帖求助!

TOP

注册了一年多,天天学批处理,还是不会写..

注册了一年多,天天学批处理,还是不会写..

看来我的脑子真的有问题

学习批处理真的需要资本,真的需要才气

看来我没有什么才气,就知道 硬一点的命令,一软,我也软了..汗..

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for %%a in (1一六 2二五 3三四 4四三 5五二 6六一 0天天) do (
  3.     set "str=%%a"
  4.     set "_!str:~,1!=!str:~1,1!"&set "_!str:~1,1!=!str:~,1!"&set ".!str:~,1!=!str:~2,1!"
  5. )
  6. set /p num=请输入向后的天数:
  7. if %num% lss 0 (set "x=前") else (set "x=后")
  8. if %num% lss -!_%date:~-1%! (set "y=.") else (set "y=_")
  9. set /a d2=num+_%date:~-1%&set "d2=!d2:-=!"
  10. set /a d2=d2%%7
  11. cls&echo.&echo 今天是%date:~-3%,%num:-=%天%x%是星期!%y%%d2%!
  12. pause>nul
复制代码

[ 本帖最后由 batman 于 2008-10-17 11:28 编辑 ]
***共同提高***

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. set n=-1
  3. for %%a in (天 一 二 三 四 五 六) do set /a n+=1 & set "%%a=!n!"&set "_!n!=%%a"
  4. set /p n=请指定天数:
  5. if %n% lss 0 (set/a d=^(7-^(~n+1^)%%7+%date:~-1%^)%%7&set x=前)else set/a d=(n+%date:~-1%)%%7&set x=后
  6. echo 今天是 %date:~-3% %n% 天%x% 是%date:~-3,2%!_%d%!
  7. pause
复制代码

TOP

返回列表