前言
在我们开发过程中,经常会遇到切换环境,重启
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,如有错误,欢迎指出,共同进步;
参考链接: