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

[文本处理] 批处理中echo %1111%出来的结果为何是111?

echo %1111%出来的结果为何是111?

echo %1234%
恩 是第一个被省略了呢

一个空的变量可能会被分段解释吧
我猜: 被分成了%1 和234%  
echo %1
echo 234%
结果是 %1为空  234%为234

[ 本帖最后由 523066680 于 2009-3-7 17:33 编辑 ]

TOP

早就说过变量名不要用数字打头,不然会被解释成批处理参数。

几乎所有语言都规定了标识符不能以数字打头。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

回复 2楼 的帖子

dos这么语言和其它的高级语言比较起来 是浪漫有余,
所以人们才有n多个问题提出来。该死的微软。

TOP

回复 2楼 的帖子

一个空的变量可能会被分段解释吧
我猜: 被分成了%1 和234%

按照你的说法,%abcd%会被分解成%a和bcd%,但其实不是。
看来你的理论不够严谨哦:)
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

单讲变量名首字为数字的情况下,2L的猜测是正确的。。。

不过,CMD中直接输入set 111=2,然后echo %111%是能正确输出2的,但在批中不行,猜测原因与预处理有关。CMD中直接执行跳过预处理,而批需要一次预处理。。。

TOP

实验证明,变量可以用数字打头。。。

批处理中set 111=2之后,set命令的列表中第一项有111=2,因此只是预处理的问题。。。

@echo off
setlocal enabledelayedexpansion
set 111=2
echo !111!
pause

以上代码测试成功。。。

TOP

回复 6楼 的帖子

我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 7楼 的帖子

Good work!
其实好几个人在好几个地方都提到过这个方法:)
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 7楼 的帖子

早就说过。。。

唉,老帖都没人看。。。

我看技术组是不是有必要定期总结和顶起一些经典老帖。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

re 2楼
我的知识不多~    恩  %1 会被解释成参数  
       原因1:  变量1234还没被定义,所以进一步分析~
       原因2:  参数范围从0~9  所一只把%1 当作了参数 而不是%12 或者....
                   所以“变量”名的第一个被省略了。假如不是1-9的数字 如%a12%不会被拆分
                  结果显示“ECHO 处于关闭状态。”

[ 本帖最后由 523066680 于 2009-3-8 12:57 编辑 ]

TOP

不管变量1234有没有定义,对于的%1234%处理总是先替换%1
http://bbs.verybat.org/viewthread.php?tid=13431&page=1&fromuid=37#pid152378
数字可以作变量名,但预处理时对%0、%1~%9、%*等参数的替换优先于对变量的扩展
试试
  1. @echo off
  2. echo %0%
  3. set 0=hello
  4. echo %0%
  5. setlocal EnableDelayedExpansion
  6. echo !0!
  7. echo.&pause
复制代码
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

返回列表