背景
有时候需要编写windows上的批处理文件,来代替命令行手动执行程序,虽然语法很简单,但是也需要一点时间来查找,编写,测试。由于用得不多,过一段时间有需要再用起来又忘了,只好再学一遍。也包括在linux上写shell脚本。这里介绍一个案例,批量执行多个python文件,只需要执行一次这个脚本,便自动完成所有测试。
任务
在目录./operators下有a.py,b.py,c.py,d.py等多个python文件,现在需要写一个脚本,分别在windows和linux下执行如下语句,即所有的python文件都将被执行两次(pr是脚本*.py内需要用的参数)
python ./operators/a.py python ./operators/a.py pr python ./operators/b.py python ./operators/b.py pr ...
所用到的语法
用到的语法包括变量定义,循环遍历,字符串连接,自增变量等。这里贴出这个任务的bat脚本和shell脚本,对应来理解。test.bat文件如下
@echo off set Path=./operators set OpsList=a;^ b;c;d;e;f;^ g;h setlocal enabledelayedexpansion set /a cnt=1 set python=d:\python36\python.exe for %%i in (%OpsList%) do ( echo "测试第!cnt!个算子文件" %python% %Path%/%%i.py %python% %Path%/%%i.py pr set /a cnt+=1 )
同样功能的test.sh文件
Path=./operators/ OpsList=(a \ b c d e f \ g h) cnt=1 for i in ${OpsList[*]}; do echo "测试第${cnt}个算子文件" python ${Path}${i}.py python ${Path}${i}.py pr let cnt++ done
有几个注意事项
- 变量赋值 = 前后不能有空格
- 引用变量,windows的格式为前后百分号%var%,shell的格式为$var
- 长字符串连接,window的bat用^,shell用反斜杠\
- windows的格式,自增变量起作用需要setlocal enabledelayedexpansion这句
- 字符串和变量的连接没有 + ,写到一起就行