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

[文本处理] 批处理怎样根据输入日期显示星座?

输入日期显示星座
如:输入 05-26
则显示 05-26 双子座 05-21至06-21
星座
  1. 白羊座 3月21日-4月19日
  2. 金牛座 4月20日-5月20日
  3. 双子座 5月21日-6月21日
  4. 巨蟹座 6月22日-7月22日
  5. 狮子座 7月23日-8月22日
  6. 处女座 8月23日-9月22日
  7. 天枰座 9月23日-10月23日
  8. 天蝎座 10月24日-11月22日
  9. 射手座 11月23日-12月21日
  10. 摩羯座 12月22日-1月19日
  11. 水瓶座 1月20日-2月18日
  12. 双鱼座 2月19日-3月20日
复制代码
技术问题请到论坛发帖求助!

随风,不至于吧,你这要求助?
***共同提高***

TOP

2# batman
简单而繁琐的代码,正好可以给论坛闲得慌的会员练手,这类代码也适合新手学习,一举多得,何乐而不为。
当然,其实最主要的原因是自己懒得写 ^_^
技术问题请到论坛发帖求助!

TOP

本帖最后由 zm900612 于 2011-5-26 19:22 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. set /p input=请输入年月
  3. for /f "skip=12 tokens=1-3* delims=月日- " %%a in ('type %~s0^&echo test %input%') do (
  4. set /a m=%%b+100,d=%%c+100
  5. if defined #!m:~-2!!d:~-2! set c=#
  6. set #!m:~-2!!d:~-2!!c!=%%a %%b月%%c日-%%d
  7. )
  8. for /f "tokens=1,2* delims== " %%a in ('set #') do (
  9. if %%b==test echo !xz!
  10. set xz=%%b %%c
  11. )
  12. pause&exit
  13. 摩羯座 1月1日-1月19日
  14. 水瓶座 1月20日-2月18日
  15. 双鱼座 2月19日-3月20日
  16. 白羊座 3月21日-4月19日
  17. 金牛座 4月20日-5月20日
  18. 双子座 5月21日-6月21日
  19. 巨蟹座 6月22日-7月22日
  20. 狮子座 7月23日-8月22日
  21. 处女座 8月23日-9月22日
  22. 天枰座 9月23日-10月23日
  23. 天蝎座 10月24日-11月22日
  24. 射手座 11月23日-12月21日
  25. 摩羯座 12月22日-12月31日
复制代码
以上第二次修改

TOP

3# 随风
那是,那是,言之有理,你懒我也懒,我就不写了哈。。。
***共同提高***

TOP

4# zm900612
输入 01-01 错误
输入 列表中的第一个日期全错.
技术问题请到论坛发帖求助!

TOP

5# batman
别偷懒啊,写个吧...
技术问题请到论坛发帖求助!

TOP

本帖最后由 zm900612 于 2011-5-26 19:24 编辑

6# 随风


原先忽略了变量重名致错的可能,已修改

10# 随风


确实,这回测试无误了,顺便把输出改成了楼主要求的格式
另外说一句,plp的思路确实够简明

TOP

本帖最后由 plp626 于 2011-5-26 18:06 编辑

3# 随风


要考虑全面还不简单,是否要判断输入 的日期正确?
=================
用if判断插空,也许容易些:
  1. 白羊座 03月21日
  2. 金牛座 04月20日
  3. 双子座 05月21日
  4. 巨蟹座 06月22日
  5. 狮子座 07月23日
  6. 处女座 08月23日
  7. 天枰座 09月23日
  8. 天蝎座 10月24日
  9. 射手座 11月23日
  10. 摩羯座 12月22日
  11. 水瓶座 13月20日
  12. 双鱼座 14月19日
复制代码

TOP

8# zm900612
修改后没测试吧.....
技术问题请到论坛发帖求助!

TOP

本帖最后由 caruko 于 2011-5-27 00:24 编辑

绝对值法,即用输入日期(数)减去每个星座的2个日期,取绝对值最小的一组。
开始以为只要几句代码,写起来才发现很多的判断。

修改了一下,找了不少二进制资料,使用set /a 位运算,直接得到整数的绝对值。 减少了if 判断。
  1. @echo off&setlocal enabledelayedexpansion
  2. set /p input=输入日期:&set/p=!input! 为 <nul
  3. for /f "tokens=1,2 delims=-" %%a in ("-!input:-0=-!") do set /a dt=%%a*100+%%b,ofset=40
  4. for /f "skip=11 tokens=1-5 delims=月日- " %%1 in (%~snx0) do (
  5.     set /a ofset1=dt-%%2*100-%%3,tp=ofset1,tp=tp">>"31,ofset1=ofset1"^"tp,ofset1=ofset1-tp
  6.     set /a ofset2=dt-%%4*100-%%5,tp=ofset2,tp=tp">>"31,ofset2=ofset2"^"tp,ofset2=ofset2-tp
  7.     if !ofset1! lss !ofset2! (set /a ost=ofset1) else set /a ost=ofset2
  8.     if !ost! lss !ofset! (set /a ofset=ost&set ecode=%%1 %%2月%%3日-%%4月%%5日)
  9. )
  10. echo,!ecode!
  11. pause>nul&goto :eof
  12. 白羊座 3月21日-4月19日
  13. 金牛座 4月20日-5月20日
  14. 双子座 5月21日-6月21日
  15. 巨蟹座 6月22日-7月22日
  16. 狮子座 7月23日-8月22日
  17. 处女座 8月23日-9月22日
  18. 天枰座 9月23日-10月23日
  19. 天蝎座 10月24日-11月22日
  20. 射手座 11月23日-12月21日
  21. 摩羯座 12月22日-1月19日
  22. 水瓶座 1月20日-2月18日
  23. 双鱼座 2月19日-3月20日
复制代码

TOP

还有个问题,4楼的星座列表和我顶楼给的不一样,到底谁是对的??
技术问题请到论坛发帖求助!

TOP

本帖最后由 plp626 于 2011-5-26 20:41 编辑

没判断非法日期:
  1. @echo off&setlocal EnableDelayedExpansion
  2. Set/p xx=请输入日期【格式如如“05-26”】:
  3. for %%a in ("01=13";"02=14";"-=月")do Set xx=!xx:%%~a!
  4. set tp=双鱼座 14月19日-03月20日
  5. for /f "tokens=1-2 delims= " %%a in (
  6. '"(more +12 %0&ECHO 哈哈哈 %xx%日)|sort /+4"'
  7. )do (
  8.     if %%a==哈哈哈 Set tp=!tp:13=01!&ECHO !tp:14=02!&pause&exit
  9.     Set tp=%%a %%b
  10. )
  11. 白羊座 03月21日-04月19日
  12. 金牛座 04月20日-05月20日
  13. 双子座 05月21日-06月21日
  14. 巨蟹座 06月22日-07月22日
  15. 狮子座 07月23日-08月22日
  16. 处女座 08月23日-09月22日
  17. 天枰座 09月23日-10月23日
  18. 天蝎座 10月24日-11月22日
  19. 射手座 11月23日-12月21日
  20. 摩羯座 12月22日-01月19日
  21. 水瓶座 13月20日-02月18日
  22. 双鱼座 14月19日-03月20日
复制代码
忘了随风最开始的要求,还要显示日期的范围,已更新。
1

评分人数

TOP

12# 随风


一样的,只是我把跨年的魔蝎座分为两部分,这样可以很简单地降低工作量...

TOP

本帖最后由 applba 于 2011-5-26 19:32 编辑

我说一下我的思路:
要求格式化输入:全部为0101-1231的形式。
之后只需要判断这些四位数字的范围即可……
  1. @echo off
  2. :input
  3. cls
  4. set /p day=请输入日期,格式为0101-1231:
  5. cls
  6. set w=
  7. if %day% lss 0101 set w=f
  8. if %day% gtr 1231 set w=f
  9. if "%day:~2,2%"=="00" set w=f
  10. if "%w%"=="f" echo 日期输入错误,请重新输入&goto done
  11. ::白羊座 3月21日-4月19日
  12. if %day% geq 0321 ( if %day% leq 0419 echo %day:~0,2%-%day:~2,2% 白羊座 3月21日-4月19日 &goto done)
  13. ::重复的,懒得写了……
  14. ::摩羯座 12月22日-1月19日
  15. set w=
  16. if %day% leq 0119 set w=f
  17. if %day% geq 1222 set w=f
  18. if "%w%"=="f" echo %day:~0,2%-%day:~2,2% 摩羯座 12月22日-1月19日 &goto done
  19. :done
  20. pause>nul
  21. goto input
复制代码
全部用if语句解决啊,用不到for

TOP

返回列表