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

[数值计算] SET /P有没有办法只允许输入数字?

  1. @echo off
  2. title 延时关机
  3. mode con: cols=32 lines=3
  4. color 1f
  5. cls
  6. set time=
  7. echo.
  8. set /p time= 请输入在多少秒后关机:
  9. title 延时 %time% 秒关机
  10. echo.
  11. echo   电脑将在 %time% 秒后关机.
  12. shutdown -s -f -t %time% >nul
  13. ping -n 15 127.0.0.1>nul
复制代码


以上代码能不能在输入秒数字限制为数字?或者输入非数字时提示重输?


另外,有没有办法把SHUTDOWN的那个倒计时窗口隐藏掉?

[ 本帖最后由 semiuel 于 2008-12-8 00:59 编辑 ]

原帖由 rat 于 2008-12-9 03:13 发表
判断数字的@echo off & setlocal
if "%~1" neq "-new" start "" "%~f0" -new & exit/b
set /p s=Please Input:
call :IsNumeric "%s%" && echo True || echo False
pause & exit



:IsNumeric
setlocal
f ...


13楼的这个方法在判断数字失败一次后进入实模式DOS,也就是说不认中文字了.

TOP

原帖由 youxi01 于 2008-12-9 08:14 发表
set /a time+1||goto loop

改成:set /a 1/%time% 2>nul||goto loop是不是可以防止很大部分错误?


此方法不能正确判断数字 0 ,因为 0 作为除数会出错。

TOP

谢谢楼主!!!
以后会看清楚再问~~~!!!!!

TOP

原帖由 too_lazy 于 2008-12-10 21:55 发表
ping -n %time% 127.1 >nul
為什么要用到這句???
可以解釋一下嗎???
謝謝


楼上问的是几楼回复里的?
我自己代码里最后一句
ping -n 15 127.0.0.1
的目的是让窗口保持10秒左右后自动关闭.

7楼代码里的这一句目的是延时%time%次PING后执行SHUTDOWN(立即关机)

TOP

ping -n %time% 127.1 >nul
為什么要用到這句???
可以解釋一下嗎???
謝謝

TOP

谢谢楼上几位包括管理员的解答,让我学到不少东西.

TOP

把四F的改成这样?

set /a time+1||goto loop

改成:
  1. set /a 1/%time% 2>nul||goto loop
复制代码
是不是可以防止很大部分错误?

TOP

判断数字的
  1. @echo off & setlocal
  2. if "%~1" neq "-new" start "" "%~f0" -new & exit/b
  3. set /p s=Please Input:
  4. call :IsNumeric "%s%" && echo True || echo False
  5. pause & exit
  6. :IsNumeric
  7. setlocal
  8. for /f "tokens=1* delims=:" %%a in ('findstr /n "^:IsNumeric$" "%~f0"') do set /a n=%%a+4
  9. (echo e11d '%~1' ff&more /e +%n% "%~f0")|debug>nul
  10. goto :eof
  11. a100
  12. MOV     BX,011D
  13. CMP     BYTE PTR [BX],30
  14. JB      0117
  15. CMP     BYTE PTR [BX],39
  16. JA      0117
  17. INC     BX
  18. CMP     BYTE PTR [BX],FF
  19. JNZ     0103
  20. MOV     AL,00
  21. JMP     0119
  22. MOV     AL,01
  23. MOV     AH,4C
  24. INT     21
  25. g
  26. q
  27. goto :eof
复制代码

TOP

回复 10楼 的帖子

2楼的正则表达式有问题,应为:
  1. echo %input%|findstr "^[0-9]*$">nul&&echo 输入正确||echo 含有非法字符
复制代码
计划任务依赖的服务是Task Scheduler,跟MSTASK没关系吧?6楼说的两个命令都是XP系统自带的,哪个软件你没有?
正确的说法是:ping -n 2 127.0.0.1约等于1秒,而不是ping -n 1 127.0.0.1约等于1秒。
5楼并未提供隐藏shutdown窗口的方法,自然无法隐藏。
set /a会认为*是算数符号,因此产生误判,不推荐使用这个方法。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

上面的代码还是有问题.
当我输入"10*20"后,SET /A判断通过了,但SHUTDOWN不认识这个"数字".

TOP

2楼代码只能判断输入的第一个字符,如果我输入"1a",它也当是数字的.
6楼,谢谢你的建议,但我一般都是把MSTASK服务关掉的.另一个你说的软件我没有.
7楼,ping -n 1 127.0.0.1只是约等于1秒,并不精确.
我按照5楼的方法写了下面的代码,没把SHUTDOWN窗口隐藏掉:
  1. @echo off
  2. title 延时关机
  3. mode con: cols=32 lines=3
  4. color 1f
  5. :begin
  6. cls
  7. set time=
  8. echo.
  9. set /p time= 请输入在多少秒后关机:
  10. set /a a=1/(%time%1) 2>nul && cls || goto begin
  11. title 延时 %time% 秒关机
  12. echo.
  13. echo   电脑将在 %time% 秒后关机.
  14. shutdown -s -f -t %time% >nul
  15. ping -n 15 127.0.0.1 >nul
复制代码

TOP

谢谢楼上这么多好心的朋友帮助,白天没时间,只能晚上上来看了.

TOP

3 楼 正确率有待提高 是什么意思?findstr完全能解决这个问题吧?
也来一个
:
  1. @echo off
  2. :loop
  3. setlocal
  4. set /p var= &cls
  5. set num=a%var%
  6. for /l %%a in (0 1 9) do call set num=%%num:%%a=%%
  7. if "%num%"=="a" (echo %var% 是纯数字) else echo %var% 不是纯数字
  8. pause
  9. endlocal
  10. goto loop
复制代码

[ 本帖最后由 随风 于 2008-12-8 15:32 编辑 ]
技术问题请到论坛发帖求助!

TOP

//有没有办法把SHUTDOWN的那个倒计时窗口隐藏掉?
  1. @echo off
  2. title 延时关机
  3. mode con: cols=32 lines=3
  4. color 1f
  5. cls
  6. set time=
  7. echo.
  8. set /p time= 请输入在多少秒后关机:
  9. title 延时 %time% 秒关机
  10. echo.
  11. echo   电脑将在 %time% 秒后关机.
  12. set /a time+=1
  13. ping -n %time% 127.1 >nul
  14. shutdown -s -f -t 0
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表