关键词
set、for、函数定义、变量延迟、字符串处理、特殊用例技巧
一、set设置变量
1、不带参 直接脚本内设置变量
set a=num
echo %a%
2、/p参数接受用户输入
set /p argv="请输出参数"
echo %argv%
3、/a 参数可进行数学计算
**不做初始化变量默认为0**
set a=5 //从0开始加可以省略
set /a a+=1
注意如果需要在for里使用set改变变量需要用到变量延迟
注意:设置变量延迟才能在for循环里使用set
rem 变量延迟
setlocal enableDelayedExpansion
for /L %%a in (D:\*) do (
set a+=1
echo %a%
)
二、for 循环语句
说在前头
- for不能嵌套
- for 的变量格式为 %%[A-aZ-z]
顺便一提
- %0是文件名 %[1-9]是对应的传参
摘要:
for有五种用法 /L /D /R /F 和不带参
- for /l %%[A-Za-z] in (start,step,end) do (做事情)
- for /d %%[A-Za-z] in (格式匹配) do (做事情)
- for /r 路径 %%[A-Za-z] in (格式匹配) do (做事情)
- for /f [options[ tokens取第几列 | delims以什么为间隔字符 ]] %%[A-Za-z] in (格式匹配) do (做事情)
1、/l 用于进行有规律的“数组”变量变量
for /l %%i in (5,-1,1) do (echo %%i)
rem 会输出
rem 5
rem 4
rem 3
rem 2
rem 1
2、 /d 用于遍历指定目录所有文件夹
注意:输出的%%a是包含D:\的完整路径,可以自己打印来看看
rem 打印D:\下一层所有文件名
for /d %%a in (D:\*) do (echo %%a)
3、 /r 递归地变量所有符合 in里格式的文件名
注意:不加路径就会以所在路径
rem 打印d盘所有.txt文件
for /r D:\ %%i in (*.txt) do (echo %%i)
4、 /f 主要是处理文件里的内容
注意:只能处理指定文件,不能用通配符,不然会报错
@echo off
setlocal enabledelayedexpansion
for /f "tokens=* delims= " %%i in (新建文本文档.txt) do (
set /a a+=1
echo !a!
rem echo %%i
)
三、函数定义
注意:函数以冒号标签开头goto:eof结尾,goto:eof会认为走到脚本末尾从而结束脚本
:start
echo its started
goto:eof
四、变量延迟
就这句写在开头
setlocal enabledelayedexpansion
很好记 enable启动 delayed延时 expansion扩展
五、截取、替换、合并字符串
这部分是转载自,学习的时候看到就一起合并了当做笔记 原文https://www.jb51.net/article/52744.htm
1、截取字符串
- 格式例子
@echo off
set ifo=abcdefghijklmnopqrstuvwxyz0123456789
echo 原字符串(第二行为各字符的序号):
echo %ifo%
echo 123456789012345678901234567890123456
echo 截取前5个字符:
echo %ifo:~0,5%
echo 截取最后5个字符:
echo %ifo:~-5%
echo 截取第一个到倒数第6个字符:
echo %ifo:~0,-5%
echo 从第4个字符开始,截取5个字符:
echo %ifo:~3,5%
echo 从倒数第14个字符开始,截取5个字符:
echo %ifo:~-14,5%
pause
- 截取时间字符的用例
@echo off
echo 当前时间是:%time% 即 %time:~0,2%点%time:~3,2%分%time:~6,2%秒%time:~9,2%厘秒
pause
2、替换字符串
@echo off
set aa=伟大的中国!我为你自豪!
echo 替换前:%aa%
echo 替换后:%aa:中国=中华人民共和国%
echo aa = %aa%
set "aa=%aa:中国=中华人民共和国%"
echo aa = %aa%
pause
3、字符串合并
@echo off
set aa=伟大的中国!
set bb=我为你自豪!
echo %aa%%bb%
echo aa=%aa%
echo bb=%bb%
set "aa=%aa%%bb%"
echo aa=%aa%
pause
复制回去调试调试就懂了
六、特殊技巧记录
- 以后有其他特殊使用技巧都会追加在这里
1、当你用for的时候需要截取部分变量的部分字符串的时候
setlocal enabledelayedexpansion
for /r %%i in (*g1.txt) do (
set a=%%i
rem 截取五个倒数五个字符
echo !a:~-5!
)
pause
闲聊
20200105
我用批处理主要是用来有规律的复制移动一些文件还有重命名
话说最近入职一家游戏公司,无论是发布还是处理游戏场景资源文件、发现很多需要操作window文件和写入的操作,重复性比较高,就开始想用批处理,节省下来的时间专注开发游戏极大减少自己的不必要工作量,俗话说的好磨刀不误砍柴工,时代在进步,能自动化的尽量不手动。
我以前的话可能更推荐用python,是,跨平台、很好用的脚本语言,但又觉得相较于简单的重复性的工作真的有必要大炮打蚊子吗,没有最好的,只有最合适。
最后还是想吐槽下公司的996,说实话995还能接受,双休很重要!!!