type
status
date
slug
summary
tags
category
icon
password
1、系统变量
他们的值由系统将其根据事先定义的条件自动赋值,不需要我们给他赋值,我们只需要调用他们即可。
%cd% 返回当前目录字符串
%time% 返回系统当前时间
%errorlevel% 返回上一条命令的返回码
%homepath% 返回用户主目录的完整路径
%userprofile%
 
特殊的系统变量:%0 %1…..%9 %*
%0 批处理所在绝对路径;表示无限循环
%1 批处理的第一个参数
%2 批处理的第二个参数
%3 - %9以此类推,在命令行参数中较实用,例:
然后在批处理路径打开cmd窗口输入:test.bat 我是第一参数 我是第二参数 我是第三参数
notion image
 
%~dp0:将批处理文件本身扩展到盘符加路径
 
2、set 定义变量
1.1 给变量赋值
注:str= 之间不能有空格,不然赋值语句失败
2.1 人机交互(/p
3.1 表达式(/a
3、set命令字符串处理
1、字符串替换
%PATH:str1=str2% 将字符串变量%PATH%中的str1替换成str2,表达式中没有空格,有空格被视为空字符串
2、字符串截取
%a:~[m[,n]]% %为变量标识符,m为偏移量(缺省为0),n为截取长度(缺省为全部)
例如:%PATH:~10,5%就是截取变量 PATH 里从 11 位(偏移量 10)开始的 5 个字符
%a:~-n% 截取变量中倒数n个字符
%a:~0,-n% 截取变量中倒数n个字符外全部字符
3、字符串的替换和截取功能在引用变量的地方均可以,并不一定必须要有 set 命令
 
3、变量延迟
在讲解变量延迟前先看个例子:
输出:4,why?
在批处理中,变量延迟是指在执行批处理脚本时,对于一个变量的值的解析是在运行时而不是在解析时进行的。这意味着在脚本执行期间,变量的值可以随时更改,而不会影响脚本中已经解析的值。变量延迟的逻辑是为了解决批处理中一些常见问题,例如循环中的变量更新问题,还有嵌套代码中的变量值问题等。
如何开启变量延迟?
  • 添加变量延迟语句:setlocal enabledelayedexpansion
  • 将原先引用变量的一对百分号”%%”替换成一对感叹哈“!!”(英文感叹号)
循环中变量延迟:
嵌套代码中环境变量问题:
在批处理中嵌套代码时,子代码中的环境变量可能会影响父代码中的环境变量。这是因为子代码中的环境变量会覆盖父代码中的同名环境变量。这可能会导致意外结果,因为父代码中环境变量可能会被修改或删除。
为避免这种情况,可以使用”setlocal”命令创建一个新的环境变量作用域。这将创建一个新的环境变量表,其中包含当前环境变量的副本。在子代码中修改环境变量时,只会影响当前环境变量表中的变量,而不会父代码中的变量。当子代码执行完毕后,可以使用”endlocal”命令来删除当前的环境变量表恢复到父代码中的环境变量。
嵌套代码中变量延迟问题: