Board logo

标题: [系统相关] 批处理选择菜单中输入双引号闪退 [打印本页]

作者: 不知道是谁    时间: 2017-9-12 00:16     标题: 批处理选择菜单中输入双引号闪退

在选择菜单中,输入双引号“,会直接闪退
倒是让我找到一个解决方法,那就是开启变量延迟。这里想请教下还有什么方法能解决这个问题?

示例代码:
  1. @echo off
  2. :1
  3. cls
  4. set n=
  5. set /p n=请输入数字(1 2):
  6. if "%n%"=="1" (set test=测试一)
  7. if "%n%"=="2" (set test=测试二)
  8. if defined test (
  9. echo 结果是 %test%,按任意键退出. . .
  10. pause >nul&exit
  11. )
  12. goto 1
复制代码
解决方法:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :1
  4. cls
  5. set n=
  6. set /p n=请输入数字(1 2):
  7. if "!n!"=="1" (set test=测试一)
  8. if "!n!"=="2" (set test=测试二)
  9. if defined test (
  10. echo 结果是 %test%,按任意键退出. . .
  11. pause >nul&exit
  12. )
  13. goto 1
复制代码

作者: /zhqsystem/zhq    时间: 2017-9-12 04:25

set /p "a=输入怎么不退?气死你哈哈
echo,%a%
作者: 1055367558    时间: 2017-9-15 18:51

不一定要用变量延迟。。直接改用if,else搭配就行了
@echo off
:1
cls
set n=
set /p n=请输入数字(1 2):
if "%n%"=="1" (set test=测试一)
if "%n%"=="2" (set test=测试二) else (echo 输入错误 &ping 127.1 -n 2 >nul)
if defined test (
echo 结果是 %test%,按任意键退出. . .
pause >nul&exit
)
goto 1
作者: 不知道是谁    时间: 2017-9-17 18:18

本帖最后由 不知道是谁 于 2017-9-17 18:20 编辑

回复 3# 1055367558


    这个没用,输入双引号还是会闪退的,你可以测试一下
除了用变量延迟外,暂时没发现有其他什么方法

还有,行数较多的代码最好用 [code] 标记起来,被发现了说不定要扣分的
作者: yu2n    时间: 2017-9-17 22:11

替换双引号:
  1. set "n=%n:"=%"
复制代码
修改后:
  1. @echo off
  2. :1
  3. cls
  4. set n=
  5. set /p "n=请输入数字(1 2):"
  6. set "n=%n:"=%"
  7. if "%n%"=="1" (set test=测试一)
  8. if "%n%"=="2" (set test=测试二)
  9. if defined test (
  10. echo 结果是 %test%,按任意键退出. . .
  11. pause >nul&exit
  12. )
  13. goto 1
复制代码

作者: 老刘1号    时间: 2017-9-17 23:33

本帖最后由 老刘1号 于 2017-9-17 23:40 编辑

回复 5# yu2n


    不严谨,比如输入""""1也会判断为一
If判断时只要"在""中成对出现就可以正常判断
所以应该是 set "var=%var:"=""%"
不改变变量内容的话,应该直接在if中予以判断
If "%var:"=""%" equ "xxx" command
同时这样还可以应对其它特殊字符
作者: 1055367558    时间: 2017-9-19 13:17

是不是说只能开变量延迟了。。。
作者: 不知道是谁    时间: 2017-9-20 18:26

回复 7# 1055367558


    开变量延迟是目前我已知的最简单的方法




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