|
provem
初级用户
积分 92
发帖 82
注册 2007-11-13
状态 离线
|
『楼 主』:
怎么控制日期的输入
:year_set_daye
set/p year_set_daye=输入4位年份 [回车]退出:
if "%year_set_daye%" =="" goto :eof
echo.%year_set_daye%|findstr "\<[1-9][0-9][0-9][0-9]\>" >nul&&goto month_set_daye||echo 输入4位年份(只能是0-9,首位不能为0)&goto year_set_daye
:month_set_daye
set/p month_set_daye=输入月份 [回车]退出:
if "%month_set_daye%" == "" echo 不能为空&goto month_set_daye
echo.%month_set_daye%|findstr "\<[0-1][0-9]\>" >nul&&(goto month_next)||(echo 输入2位月份&goto month_set_daye)
:month_next
if %month_set_daye% gtr 12 echo.输入月份大于了12&goto month_set_daye
if "%month_set_daye%" lss "01" echo.错误输入&goto month_set_daye
echo %month_set_daye%|findstr "^[0-9]*$">nul&&goto day_set_daye||echo 只能是0-9&goto month_set_daye
:day_set_daye
set/p p3=输入日期 [回车]退出:
if "%p3%" == "" echo 不能为空 &goto day_set_daye
echo.%p3%|findstr "\<[0-3][0-9]\>" >nul&&(goto day_next)||(echo 输入2位日期&goto day_set_daye)
:day_next
if %p3% gtr 31 echo.错误输入&goto day_set_daye
if %p3% lss 1 echo.错误输入&goto day_set_daye
echo %p3%|findstr "^[0-9]*$">nul&&goto p4||echo 只能是0-9&goto day_set_daye
:p4
....
... 这上面的代码有问题,应该怎么完善
|
|
2009-2-14 16:33 |
|
|
HAT
版主
积分 9023
发帖 5017
注册 2007-5-31
状态 离线
|
『第
2 楼』:
上面的代码有什么问题?
|
|
|
2009-2-14 16:58 |
|
|
provem
初级用户
积分 92
发帖 82
注册 2007-11-13
状态 离线
|
『第
3 楼』:
输入08月和09月会出错
If帮助有:
如果您使用任何逻辑或取余操作符, 您需要将表达式字符串用
引号扩起来。在表达式中的任何非数字字符串键作为环境变量
名称,这些环境变量名称的值已在使用前转换成数字。如果指定
了一个环境变量名称,但未在当前环境中定义,那么值将被定为
零。这使您可以使用环境变量值做计算而不用键入那些 % 符号
来得到它们的值。如果 SET /A 在命令脚本外的命令行执行的,
那么它显示该表达式的最后值。该分配的操作符在分配的操作符
左边需要一个环境变量名称。除十六进制有 0x 前缀, 八进制
有 0 前缀的,数字值为十进位数字。因此, 0x12 与 18 和 022
相同。请注意八进制公式可能很容易搞混: 08 和 09 是无效的数字,
因为 8 和 9 不是有效的八进制位数。
没看明白
月份输入08或09
if %month_set_daye% lss 1 echo.输入月份小于了1
判断08或09竟然是小于1
[ Last edited by provem on 2009-2-14 at 17:06 ]
|
|
2009-2-14 17:04 |
|
|
provem
初级用户
积分 92
发帖 82
注册 2007-11-13
状态 离线
|
『第
4 楼』:
明白了输入 08 或09时 已经认为是8进制的数值了,所以当输入08或09时就会出错
那这个问题应该怎么避免呢
|
|
2009-2-14 17:12 |
|
|
HAT
版主
积分 9023
发帖 5017
注册 2007-5-31
状态 离线
|
|
2009-2-14 17:14 |
|
|
netbenton
银牌会员
批处理编程迷
积分 1916
发帖 752
注册 2008-12-28 来自 广西
状态 离线
|
『第
6 楼』:
@echo off&setlocal enabledelayedexpansion
set msn= 31 28 31 30 31 30 31 31 30 31 30 31
set ms0= 31 29 31 30 31 30 31 31 30 31 30 31
:lp
set /p gd=输入开始日期(yyyy-mm-dd):
set gd=%gd:~0,10%
if not "%gd:~4,1%%gd:~7,1%"=="--" goto :err
set/a d=1%gd:~8,2%-100,m=1%gd:~5,2%-100,y=1%gd:~0,4%-10000 || goto :err
if %y% lss 1800 goto :err
if %y% gtr 2050 goto :err
if %m% gtr 12 goto :err
if %m% leq 0 goto :err
if %d% leq 0 goto :err
set/a vy=y%%4,vm=^(m+11^)%%12*3
if %vy%==0 (set ms=%ms0%) else (set ms=%msn%)
set am=!ms:~%vm%,3!
if %d% gtr %am% goto :err
::前面校验日期的有效性,并把年,月,日分别存到变量y,m,d
set ch=7
::计算七天后日期
set/a d+=ch
if %d% gtr %am% (set/a m+=1
if !m! gtr 12 (set/a y+=1,m=1)
set/a d-=am
)
::调整日期格式
if %m% lss 10 (set m=0%m%)
if %d% lss 10 (set d=0%d%)
set date-x=%y%-%m%-%d%
echo 输入的日期是:%gd%
echo 该日期%ch%天后是:%date-x%
echo.
echo.
::修改文件数据
(echo =============================================
for /f "tokens=1* delims==" %%a in (a.property) do (
if "%%b"=="" (echo.%%a) else (
set "str=%%a"
if "!str:~0,9!"=="BeginDate" (echo.%%a=%gd%)
if "!str:~0,7!"=="EndDate" (echo.%%a=%date-x%)
if "!str:~0,6!"=="Minute" (echo.%%a=%%b)
)
)
echo =============================================)>a.temp
type a.temp>a.property
type a.temp&del a.temp
pause
goto :eof
:err
echo 输入格式有错!请重新输入.&goto :lp [ Last edited by netbenton on 2009-4-9 at 11:33 ]
|
精简
[你的+我的+他的]=>[大家的] 个人网志 |
|
2009-2-14 18:24 |
|
|
provem
初级用户
积分 92
发帖 82
注册 2007-11-13
状态 离线
|
『第
7 楼』:
我希望的还是要保留那个0,不知道还有其它办法没
|
|
2009-2-14 19:11 |
|
|
HAT
版主
积分 9023
发帖 5017
注册 2007-5-31
状态 离线
|
『第
8 楼』:
Re 7楼
if 1%month_set_daye% lss 101 echo.错误输入&goto month_set_daye 这样行么?
|
|
|
2009-2-14 21:42 |
|
|
provem
初级用户
积分 92
发帖 82
注册 2007-11-13
状态 离线
|
|
2009-2-20 14:48 |
|
|
HAT
版主
积分 9023
发帖 5017
注册 2007-5-31
状态 离线
|
『第
10 楼』:
Re 9楼
@echo off
set /p month_set_daye=请输入月份:
if 1%month_set_daye% lss 101 (
echo.错误输入
goto :month_set_daye
)
echo 行。
goto :eof
:month_set_daye
echo 不行?去电线杆上找老中医! Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:\Test>test.bat
请输入月份:08
行。
C:\Test>test.bat
请输入月份:09
行。
C:\Test>test.bat
请输入月份:0
错误输入
不行?去电线杆上找老中医!
C:\Test> [/olor]
|
|
|
2009-2-20 15:22 |
|