Board logo

标题: [其他] 批处理报错“不是内部或外部命令,也不是可运行的程序或批处理文件”是什么原因 [打印本页]

作者: Lornan    时间: 2014-12-10 11:28     标题: 批处理报错“不是内部或外部命令,也不是可运行的程序或批处理文件”是什么原因

这是源命令
  1. @echo on
  2. :start
  3. echo =====POWER TOOL=====
  4. echo  To restart press 1
  5. echo  To logoff press 2
  6. echo  To shutdown press 3
  7. echo  To exit me press any other key
  8. set NUM=
  9. set /p NUM=Press the key you choose:
  10. %errorlevel%
  11. if "%NUM%"=="1" (
  12. shutdown -r
  13. )
  14. if "%NUM%"=="2" (
  15. logoff
  16. )
  17. if "%NUM%"=="3" (
  18. shutdown -s
  19. )
  20. %errorlevel%
  21. pause
  22. call :start
  23. pause
复制代码
这是运行后的图片
还有就是输入了1,为什么返回的是“1不是………………”这个信息?(不过shutdown命令依旧在我输入1后被执行了
作者: DAIC    时间: 2014-12-10 11:32

是第20行代码
作者: Lornan    时间: 2014-12-10 16:09

回复 2# DAIC
20行不是程序返回码吗?图中为什么会显示“0不是……”,这意思是返回码被当作外部文本被输入了?
还有前面输入1,既然它显示“1不是……”,那为什么实际运行的时候shutdown命令还是被执行了?
作者: amwfjhh    时间: 2014-12-10 16:26

回复 3# Lornan


    批处理是以"关键字+分割符+参数表"的方式来解析每行代码的,你这里面出错的两行就是少了关键字这么一个重要元素,所以它将第一个出现的值作为关键字来解析,也就是说将1和0当成一个命令来看,显然,系统中没有这样的命令,所以提示错误,如果想单纯显示该值,请加相应关键字和分割符,比如
  1. echo,%errorlevel%
复制代码

作者: DAIC    时间: 2014-12-10 21:08

回复 3# Lornan


    查看返回码应该是 echo %errorlevel%
作者: Lornan    时间: 2014-12-10 22:38

回复 4# amwfjhh


    恩恩,突然想起来了,谢谢
作者: Lornan    时间: 2014-12-10 22:38

回复 5# DAIC


    嗯,对,谢谢
作者: Lornan    时间: 2014-12-10 22:40

那这个if else语句哪有错?为什么执行了if又执行了else的?
作者: DAIC    时间: 2014-12-11 08:23

回复 8# Lornan
  1. @echo off
  2. :start
  3. echo =====POWER TOOL=====
  4. echo  To restart press 1
  5. echo  To logoff press 2
  6. echo  To shutdown press 3
  7. echo  To exit me press any other key
  8. set NUM=
  9. set /p NUM=Press the key you choose:
  10. echo %errorlevel%
  11. if "%NUM%"=="1" (
  12.     shutdown -r
  13. ) else if "%NUM%"=="2" (
  14.     logoff
  15. ) else if "%NUM%"=="3" (
  16.     shutdown -s
  17. )
  18. echo %errorlevel%
  19. pause
  20. goto :start
  21. pause
复制代码

作者: Lornan    时间: 2014-12-11 13:13

回复 9# DAIC


    喔喔,懂了,我的else是当NUM不等于3时就被执行的。而不是不等于1,2,3时才被执行的,要想在不等于1,2,3中任意一个时就echo的话,必须在每一个if语句后都加上相应的else语句 ,一个else只对当前一个if有效,对吧?




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2