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

[其他] [分享]批处理set命令赋值时的易错情况

今天学习学习了变量延迟后,用了几个例子玩玩。
但是一会就出现问题了:
代码:
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. set x=100#
  4. set y=100#& if !y! equ %x% (echo ok,they are equal) else (echo no,fuck)
  5. pause
复制代码
这个正常运行,但是如果这样赋值set x=100 #   set y=100#(x值里多了个空格),比较就会出错。
晕调试了十来分钟才搞定。
原来set赋值时,可以接受空格这个字符的。以后可得注意了,晕...

后续:
个人体会:
set 赋值时,注意别随意加【空格】,因为空格也是一个字符。赋值时注意。
还是上面的例子:set y=100& echo.....(加“&”这个连接符,用set赋值时,特别注意别输入空格和“Tab键”)
谢谢。

在顶楼说说你的解决方法吧,也好让后来人有个借鉴。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

别说100[空格]后还有字符,就算没有字符也不同啊
所以为了避免空格出错,常用:
set  "str=var" 来区分 set str=var[空格]

TOP

回复 3楼 的帖子

100后没有别的字符,比较是一样的(空格也是字符)
原来的bat后是没有“#”这个字符的,这是我后来加上的。
字符:x=100 【空格】# ( 我只是让别人看到能直接看出,【空格】也是一个字符。)
谢谢

TOP

回复 2楼 的帖子

现在还没有找到,避免空格出错的好办法,还是请Batcher指教。

TOP

我一般采用双引号和缩进
  1. @echo off
  2. set "x=100"
  3. set "y=100"
  4. if %y% equ %x% (
  5.     echo ok
  6. ) else (
  7.     echo no
  8. )
  9. pause
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 6楼 的帖子

呵呵。受益匪浅,双引号和缩进就是让代码简洁明了,赋值时也不那么容易出错。
谢谢Batcher兄^_^。
引用【batman对批处理新人的若干建议】里的例子:
源代码(代码最后少个")")
  1. @echo off &setlocal enabledelayedexpansion
  2. for /l %%a in (1,1,10) do (
  3.     if %%a leq 3 (
  4.        set /a num=3*%%a&echo !num!
  5.        ) else (
  6.        if %%a leq 6 (
  7.           set /a num=6*%%a&echo !num!
  8.           ) else (
  9.           if %%a leq 9 (
  10.              set /a num=9*%%a&echo !num!
  11.              ) else (
  12.              echo %%a
  13.           )
  14.        )
  15.     )
  16. pause>nul
复制代码
【例子调过后看着舒服^_^】:
  1. @echo off & setlocal enabledelayedexpansion
  2. for /l %%a in (1,1,10) do (
  3.         if %%a leq 3 (
  4.            set /a "num=3*%%a" &echo !num!
  5.            ) else (
  6.            if %%a leq 6 (
  7.            set /a "num=6*%%a" &echo !num!
  8.            ) else (
  9.            if %%a leq 9 (
  10.            set /a "num=9*%%a" &echo !num!
  11.            ) else (echo %%a)
  12.       )
  13.     )
  14.   )                           
  15. pause>nul
复制代码

TOP

回复 3楼 的帖子

谢谢指教
现在好多了,不那么容易出错了

TOP

返回列表