标题: [其他] 批处理命令set /p 引用值为数字的变量时无法正常执行的问题 [打印本页]
作者: riscrisc 时间: 2017-4-25 11:15 标题: 批处理命令set /p 引用值为数字的变量时无法正常执行的问题
新手请教变量引用问题:
-----------------代码1---------------------- ::setlocal enabledelayedexpansion
- set var=9
- set /p num=%var%<nul
- ::set /p num=!var!<nul
- echo %num%
复制代码
-----------------代码2---------------------- setlocal enabledelayedexpansion
- set var=9
- ::set /p num=%var%<nul
- set /p num=!var!<nul
- echo %num%
复制代码
--------------------------------------------
问题:代码1执行以后为何程序还停留在等待用户输入的状态?而且原本期待%var%被输出,但是也没有看到输出,我原本以为有了“<nul”可以自动跳过等待用户输入回车的步骤,不知为何?作为对比,代码2就可以自动跳过等待用户输入的状态,而且“9”(!var!)被正确输出了,请大神指点原因。
作者: ShowCode 时间: 2017-4-25 14:17
set /p num=%var% <nul 重定向符号左边加个空格也能达到代码2的效果
虽然代码2看起来输出了数字9,但它是作为set命令的prompt输出的,变量%num%并没有取到值
作者: pcl_test 时间: 2017-4-25 18:03
1、预处理时,变量先展开为9,输入重定向到句柄9
2、延迟后,输入还是默认为句柄0,变量之后展开为9
作者: cfwyy77_bat 时间: 2017-4-26 14:06
本帖最后由 cfwyy77_bat 于 2017-4-26 22:23 编辑
学习的路过, 楼上两位大神其实说的很清楚了,结合他们的说法 还有我自己的理解我再罗列一下 也相当于自己学习了,如有不对 大家指正。
代码1: 没有变量延迟时,%var%<nul 相当于 9<nul ,也就是空 输入重定向到 句柄9去了 而标准输入句柄0仍然 等待输入。
如果 <前面来个空格 相当于 set /p num=9 <nul ,这里9成为提示 会直接输出。 <nul输入空,所以num 什么也没得到 是空。
代码2:开启变量延迟,也是相当于set /p num=9 <nul,情况和代码1前面加一个空格一样。9成为提示 会直接输出。 所以最后的结果是 9 ECHO is on , 就是变量并没有正确输出,它还是空。
作者: riscrisc 时间: 2017-4-26 16:20
谢谢楼上各位的指点,学习了
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |