【原创】【学习笔记9】 %的数量显示 for与%%var %var% !var! 0% 和环境变量延迟

本文是基于其他牛人的文章学习所得

学习基础:https://blog.csdn.net/rrrrrr123rrr/article/details/47861383

我自己测试了下,总结了下知识点

 

测试代码 和结果

@echo off
setlocal enabledelayedexpansion
set var=999
for /l %%a in (1,1,5) do (
set var=888
set var=%%a
echo a=%%a
echo var=!var!
echo %%var%%=%var%
)
echo test % num 
echo "2"%%     
echo "3"%%%    
echo "4"%%%%   
echo "5"%%%%%  
echo "6"%%%%%% 
pause

显示结果

 

 

%的数量显示  

测试的结果是

  • 如果作为文本显示,那么%显示的数量将是  num of % /2 的取整
  •  

 

%与参数和变量

  • 一般来说,参数是用于调用 函数/文件/脚本 时传递的,而变量是定义出来的
  • bat里参数也是变量的本质,所以也用%
  • 参数显示用%0 %1 ...%9
  • 其中%0表示自己或路径?测试下
  • 而变量都要用 %var%

 

for与%%  %var%  !var!

  • for循环里的循环体变量格式
  • for循环里的循环体的变量写法必须为%%a,其他地方可以有%var%
  • for循环体里,用于循环的那个的变量写法,不能是 %var%,循环体的变量必须写为  %%a
  • for里其他地方也可以有%var%,但这会优先显示为外面的 var变量的值

 

  • for内部如果改变了变量的值,想识别则必须用setlocal enabledelayedexpansion
  • 在for循环内部,如果不加 setlocal enabledelayedexpansion,那么 关键字 !var!只会被当做字符串,无法被识别为变量
  • for 或者if 内部,想识别内部有变化变量,必须用!var! 也就必须用setlocal enabledelayedexpansion

 

  • 加了 setlocal enabledelayedexpansion,!var!才会被识别
  • 但如果for循环内部并无这个变量的值赋值,而外面有,会自动识别为%var%一样
  • 可以用rem注掉   var=888 和 set var=%%a 试试
  • for内部如果有 对 var变量 的新赋值,!var!才会识别 for循环内的变量变化
  • 但如果有了循环赋值,会识别for对 var 变量的修改

 

 

其中%0表示相对路径 或 绝对路径

  • 0%在bat脚本运行时,只会显示相对路径----文件名(但加上本身前面的路径,也是完整路径)
  • 0%直接双击运行,会显示 文件完整路径

 

2.bat

@echo off
echo %%0=%0
echo %%1=%1
echo %%2=%2
pause

 

 

 

 

关于环境变量的延迟的文章,需要学习

  • 环境变量延迟我现在理解是这样
  • BAT是一行为一个语句
  • 而且每次bat是先读取一整行语句后,预先给变量赋值,然后才执行语句
  • 环境变量延迟enabledelayedexpersion 就是告诉bat 先把这一行语句执行了再给变量赋值,延迟赋值。

https://www.jb51.net/article/97190.htm

https://www.jb51.net/article/29323.htm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值