找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 35932|回复: 9

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

[复制链接]
发表于 2014-12-10 11:28:59 | 显示全部楼层 |阅读模式
这是源命令
  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后被执行了

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2014-12-10 11:32:13 | 显示全部楼层
是第20行代码
 楼主| 发表于 2014-12-10 16:09:37 | 显示全部楼层
回复 2# DAIC
20行不是程序返回码吗?图中为什么会显示“0不是……”,这意思是返回码被当作外部文本被输入了?
还有前面输入1,既然它显示“1不是……”,那为什么实际运行的时候shutdown命令还是被执行了?
发表于 2014-12-10 16:26:39 | 显示全部楼层
回复 3# Lornan


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

评分

参与人数 1技术 +1 收起 理由
Lornan + 1 解释彻底清晰

查看全部评分

发表于 2014-12-10 21:08:12 | 显示全部楼层
回复 3# Lornan


    查看返回码应该是 echo %errorlevel%
 楼主| 发表于 2014-12-10 22:38:14 | 显示全部楼层
回复 4# amwfjhh


    恩恩,突然想起来了,谢谢
 楼主| 发表于 2014-12-10 22:38:51 | 显示全部楼层
回复 5# DAIC


    嗯,对,谢谢
 楼主| 发表于 2014-12-10 22:40:45 | 显示全部楼层
那这个if else语句哪有错?为什么执行了if又执行了else的?
发表于 2014-12-11 08:23:44 | 显示全部楼层
回复 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
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2014-12-11 13:13:51 | 显示全部楼层
回复 9# DAIC


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

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 15:37 , Processed in 0.019928 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表