找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 25425|回复: 4

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

[复制链接]
发表于 2017-4-25 11:15:22 | 显示全部楼层 |阅读模式
新手请教变量引用问题:
-----------------代码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!)被正确输出了,请大神指点原因。

评分

参与人数 1PB -4 收起 理由
pcl_test -4 勿发笼统的标题

查看全部评分

发表于 2017-4-25 14:17:17 | 显示全部楼层
set /p num=%var% <nul 重定向符号左边加个空格也能达到代码2的效果
虽然代码2看起来输出了数字9,但它是作为set命令的prompt输出的,变量%num%并没有取到值
发表于 2017-4-25 18:03:52 | 显示全部楼层
1、预处理时,变量先展开为9,输入重定向到句柄9
2、延迟后,输入还是默认为句柄0,变量之后展开为9
发表于 2017-4-26 14:06:10 | 显示全部楼层
本帖最后由 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 ,  就是变量并没有正确输出,它还是空。
 楼主| 发表于 2017-4-26 16:20:48 | 显示全部楼层
谢谢楼上各位的指点,学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 16:03 , Processed in 0.018642 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表