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

[系统相关] 批处理选择菜单中输入双引号闪退

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

示例代码:
  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
复制代码

set /p "a=输入怎么不退?气死你哈哈
echo,%a%
这么好的论坛你上哪找,运行测试环境为6.1.7601-64
注:请遵守互联网信息安全,勿用于非法用途

TOP

不一定要用变量延迟。。直接改用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

TOP

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

回复 3# 1055367558


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

还有,行数较多的代码最好用 [code] 标记起来,被发现了说不定要扣分的

TOP

替换双引号:
  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
复制代码
『千江有水千江月』千江有水,月映千江;万里无云,万里青天。    http://yu2n.qiniudn.com/

TOP

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

回复 5# yu2n


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

TOP

是不是说只能开变量延迟了。。。

TOP

回复 7# 1055367558


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

TOP

返回列表