前言
在我们开发过程中,经常会遇到切换环境,重启
nginx
,或者执行一系列的dos命令等,频繁的操作势必会很繁琐,浪费时间,作为一个程序员,重复的事情,当然要交给电脑了~
首先了解一下什么是 .bat ?
批处理(Batch),也称为批处理脚本。顾名思义,批处理就是对某对象进行批量的处理。批处理文件的扩展名为bat;
正文开始
以一个简单的nginx启动、重启、停止说起:
1. 首先切换到nginx目录,包含nginx.exe目录;
2. 按住shift,鼠标右键在此处打开powershell窗口;
nginx一般的三个操作如下:
描述 | 命令 |
---|---|
启动 | start .\nginx.exe |
重启 | .\nginx.exe -s reload |
停止 | .\nginx.exe -s stop |
注意:如果你不小心启动了多次,那么就会启动多个nginx进程,你用stop不能全部停止;可以用如下命令:
taskkill /fi "imagename eq nginx.EXE" /f
杀掉所有的nginx进程;
接下来就展示如何使用bat批处理命令来做这个事情,先看下代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38@echo off
:entry
cls
echo nginx一键操作命令集合:
echo ********************************
echo 1. 开启nginx
echo 2. 重启nginx
echo 3. 停止nginx
echo 4. 退出
echo ********************************
echo 请选择你要执行的操作...
set /p userchoice=
if "%userchoice%"=="1" goto startN
if "%userchoice%"=="2" goto reloadN
if "%userchoice%"=="3" goto stopN
if "%userchoice%"=="4" goto quit
:startN
start .\nginx.exe
goto succ
:reloadN
.\nginx.exe -s reload
goto succ
:stopN
taskkill /fi "imagename eq nginx.EXE" /f
goto succ
:quit
exit
:succ
echo 执行成功
pause
goto entry
@echo on
首先在上面说到的nginx目录下,新建一个.bat文件
,将上述代码放进去就可以体会到一键操作了;
接下来大概说说代码set /p userchoice=
,意思是设置一个变量userchoice,值为用户输入;:startN :entry :succ
类似一个方法,判断用输入的值,执行对应的方法;批处理命令是一行一行的执行命令,执行完成后,就会关闭shell窗口,如果想保持可以使用 pause
会出现请按任意键继续…;如此就完成了一个一键操作的脚本,由于该文件放在nginx的安装目录,为了方便,可以右键,发送快捷模式到桌面;
bat进阶-修改文件
由于目前本地的项目是用
nginx
启动访问,至于为什么,这里不解释,就是必须要用nginx
,nginx
里面的转发需要调用后台接口,而调用的环境经常变化,这样就需要先修改代理接口环境地址,然后重启nginx
;
现在我们的bat
要执行修改文件,然后重启nginx
操作,代码如下(仅供参考)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54@echo off
:entry
cls
echo *****系统一键切换环境*****
echo ********************************
echo 1. 开发dev01环境
echo 2. 开发dev02环境
echo 3. ---测试--01--环境
echo 4. ---测试--02--环境
echo ********************************
echo 请选择你要切换环境...
set /p userInput=
if "%userInput%"=="1" goto dev01
if "%userInput%"=="2" goto dev02
if "%userInput%"=="3" goto test01
if "%userInput%"=="4" goto test02
:dev01
set cc=proxy_pass http://ys.dev01.51ju.cn; #tag
goto switch
:dev02
set cc=proxy_pass http://ys.dev02.51ju.cn; #tag
goto switch
:test01
set cc=proxy_pass http://ys.test.51ju.cn; #tag
goto switch
:test02
set cc=proxy_pass http://ys.test02.51ju.cn; #tag
goto switch
:switch
echo 正在切换中...
echo -------------------------
(for /f "tokens=*" %%i in (a.conf) do echo %%i|findstr /ie tag>nul&&echo %cc%||echo %%i)>temp.ini
move /y temp.ini a.conf
echo -------------------------
echo 已经切换至: %cc%
echo -------------------------
echo 开始重启nginx...
cd ../../
.\nginx.exe -s reload
echo --------------------------
echo nginx 重启成功~
cd D:\nginx-1.13.12\conf\servers\
echo --------------------------
pause
goto entry
@echo on
大概原理同上,主要说明一下for
循环这个语句,
- 首先获取到
a.conf
,然后循环每一行代码, %%i
相当于循环的当前行代码,|findstr
是在当前行查找字符串,/ie
忽略大小写和从行末开始查找;tag>nul
找到'tag'
时,就把这一行清空:echo %cc%
是将方法中设置的cc值复制到这一行;move -y
就是移动文件到当前目录并取消重写文件发出的提示;
注意: 默认配置中,需要修改的那一行命令需要添加一个标记tag。
以上就完成了对一个文件的修改;修改文件后,需要重启nginx
,但是这个文件的目录和nginx
不在同一个目录下,需要执行命令cd ../../
跳转到nginx.exe的那个目录,执行nginx重启,由于切换命令要重复使用,当前目录已经修改了,所以需要再跳转回来cd D:\nginx-1.13.12\conf\servers\
;
娱乐一下
相信看过科幻片的同学都知道,电脑大神或者黑客操作电脑时,不断的弹出dos
窗口,然后绿色代码滚屏,其实很简单实现,原理如下:1
2
3
4
5
6
7
8
9@echo off
echo 当前在call目录下
start "reload" cmd /k
cd /d D:\test
call reload.bat
echo over...
pause
以上是在当前脚本中,新开dos
窗口并调用其他目录下的脚本,如此循环重复,很简单的就实现不断开dos
窗口了,至于滚屏,结合echo输出就可实现,pause
命令是,代码执行到这一行时,提示请按任意键继续… 然后继续执行命令;
ps: 第一次捣鼓bat
,如有错误,欢迎指出,共同进步;
参考链接: