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

[其他] 批处理命令set /p 引用值为数字的变量时无法正常执行的问题

新手请教变量引用问题:
-----------------代码1---------------------
  1. ::setlocal enabledelayedexpansion
  2. set var=9
  3. set /p num=%var%<nul
  4. ::set /p num=!var!<nul
  5. echo %num%
复制代码
-----------------代码2---------------------
  1. setlocal enabledelayedexpansion
  2. set var=9
  3. ::set /p num=%var%<nul
  4. set /p num=!var!<nul
  5. echo %num%
复制代码
--------------------------------------------
问题:代码1执行以后为何程序还停留在等待用户输入的状态?而且原本期待%var%被输出,但是也没有看到输出,我原本以为有了“<nul”可以自动跳过等待用户输入回车的步骤,不知为何?作为对比,代码2就可以自动跳过等待用户输入的状态,而且“9”(!var!)被正确输出了,请大神指点原因。
1

评分人数

set /p num=%var% <nul 重定向符号左边加个空格也能达到代码2的效果
虽然代码2看起来输出了数字9,但它是作为set命令的prompt输出的,变量%num%并没有取到值

TOP

1、预处理时,变量先展开为9,输入重定向到句柄9
2、延迟后,输入还是默认为句柄0,变量之后展开为9

TOP

本帖最后由 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 ,  就是变量并没有正确输出,它还是空。

TOP

谢谢楼上各位的指点,学习了

TOP

返回列表