Board logo

标题: [其他] [已解决]求助批处理代码解释 [打印本页]

作者: laiu888    时间: 2015-9-21 14:36     标题: [已解决]求助批处理代码解释

本帖最后由 pcl_test 于 2016-9-12 15:28 编辑

麻烦高人指点一下 _%a%和"_%a%=%a%"都代表啥意思,万分感谢
  1.     @echo off
  2.     :begin
  3.     set /a a=%random%%%20
  4.     if defined _%a% goto begin
  5.     set /p=%a% <nul
  6.     set /a n+=1,"_%a%=%a%"
  7.     if %n% lss 5 goto begin
  8.     pause>nul
复制代码

作者: 尘丶    时间: 2015-9-21 14:46

回复 1# laiu888


    set /a n+=1,"_%a%=%a%"
这句话的意思是set /a n=%n%+1和set /a _%a%=%a%
_%a%是设置_变量a
set /a _%a%=%a%
意思是计算_变量%a%等于变量%a%
你在后面加一个代码
set _
你就知道了
作者: flyinnet9    时间: 2015-9-21 14:50

把_当成str你就认识了,别当特殊符号
_%a%不认识,str%a%认识不?
作者: laiu888    时间: 2015-9-21 15:40

本帖最后由 laiu888 于 2015-9-21 15:50 编辑

回复 2# 尘丶

你的意思是_%a%是和%a%不同的另一个变量,对不?
那我把_%a%换成b怎么程序就不对了总出错?
  1.     @echo off
  2.     :begin
  3.     set /a a=%random%%%20
  4.     if defined b goto begin
  5.     set /p=%a% <nul
  6.     set /a n+=1,b=%a%
  7.     if %n% lss 5 goto begin
  8.     pause>nul
复制代码

作者: laiu888    时间: 2015-9-21 15:52

回复 3# flyinnet9


  _%a%=%a%
搞不懂为什么要换成这样做 ,如果换成其他变量怎么就出错?
作者: flyinnet9    时间: 2015-9-21 15:58

本帖最后由 flyinnet9 于 2015-9-21 16:03 编辑

回复 5# laiu888


    因为_%a%是一个变量,同时是一个可变的变量
基于set /a a=%random%%%20
_%a%可能是_0------_19的任何一个
例:当a=1, set _%a%=%a%就是set _1=1,把“1”赋值给“_1”
作者: 尘丶    时间: 2015-9-21 16:04

回复 5# laiu888
  1.     @echo off
  2.     :begin
  3.     set /a b=%random%%%20
  4.     if defined _%b% goto begin
  5.     set /p=%b% <nul
  6.     set /a n+=1,_%b%=%b%
  7.     if %n% lss 5 goto begin
  8.     pause>nul
复制代码
  1.     @echo off
  2.     :begin
  3.     set /a b=%random%%%20
  4.     if defined %b% goto begin
  5.     set /p=%b% <nul
  6.     set /a n+=1,%b%=%b% 2>nul
  7.     if %n% lss 5 goto begin
  8.     pause>nul
复制代码
去掉echo off 自己体会下
因为变量b的值是固定的
_%b%这个%b%的值不是固定的
作者: laiu888    时间: 2015-9-21 16:52

回复 7# 尘丶


    这个程序是明白了一些,你看看我写的这个代码,按理说应该显示两个1的,但第二个1总显示不出来,
  1. @echo off
  2. set a=1
  3. set "_%a%=%a%"
  4. echo %a%  
  5. call echo %_%a%%
复制代码

作者: 尘丶    时间: 2015-9-21 17:00

回复 8# laiu888
  1. @echo off
  2. set a=1
  3. set "_%a%=%a%"
  4. echo %a%  
  5. call echo %%_%a%%%
  6. pause
复制代码
call要两层%
  1. @echo off&setlocal enabledelayedexpansion
  2. set a=1
  3. set "_%a%=%a%"
  4. echo %a%  
  5. echo !_%a%!
  6. pause
复制代码
或者开延迟变量
作者: laiu888    时间: 2015-9-21 17:35

回复 9# 尘丶


    哦,明白了,谢谢尘丶
作者: laiu888    时间: 2015-9-21 17:35

回复 6# flyinnet9


    谢谢flyinnet9
作者: 尘丶    时间: 2015-9-21 17:47

回复 11# laiu888


    问题解决了,麻烦在帖子上标上[已解决]




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2