标题: [系统相关] 批处理选择菜单中输入双引号闪退 [打印本页]
作者: 不知道是谁 时间: 2017-9-12 00:16 标题: 批处理选择菜单中输入双引号闪退
在选择菜单中,输入双引号“,会直接闪退
倒是让我找到一个解决方法,那就是开启变量延迟。这里想请教下还有什么方法能解决这个问题?
示例代码:- @echo off
- :1
- cls
- set n=
- set /p n=请输入数字(1 2):
- if "%n%"=="1" (set test=测试一)
- if "%n%"=="2" (set test=测试二)
- if defined test (
- echo 结果是 %test%,按任意键退出. . .
- pause >nul&exit
- )
- goto 1
复制代码
解决方法:- @echo off
- setlocal enabledelayedexpansion
- :1
- cls
- set n=
- set /p n=请输入数字(1 2):
- if "!n!"=="1" (set test=测试一)
- if "!n!"=="2" (set test=测试二)
- if defined test (
- echo 结果是 %test%,按任意键退出. . .
- pause >nul&exit
- )
- 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
替换双引号:复制代码
修改后:- @echo off
- :1
- cls
- set n=
- set /p "n=请输入数字(1 2):"
- set "n=%n:"=%"
- if "%n%"=="1" (set test=测试一)
- if "%n%"=="2" (set test=测试二)
- if defined test (
- echo 结果是 %test%,按任意键退出. . .
- pause >nul&exit
- )
- 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 |