本文是基于其他牛人的文章学习所得
学习基础: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 先把这一行语句执行了再给变量赋值,延迟赋值。