程序员需要懂点的批处理命令之bat(1.0)

前言

在我们开发过程中,经常会遇到切换环境,重启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批处理命令来做这个事情,先看下代码:

@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启动访问,至于为什么,这里不解释,就是必须要用nginxnginx里面的转发需要调用后台接口,而调用的环境经常变化,这样就需要先修改代理接口环境地址,然后重启nginx

现在我们的bat要执行修改文件,然后重启nginx操作,代码如下(仅供参考)

@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窗口,然后绿色代码滚屏,其实很简单实现,原理如下:

@echo off
echo 当前在call目录下

start "reload" cmd /k
cd /d D:\test 
call reload.bat 

echo over...
pause
复制代码

以上是在当前脚本中,新开dos窗口并调用其他目录下的脚本,如此循环重复,很简单的就实现不断开dos窗口了,至于滚屏,结合echo输出就可实现,pause命令是,代码执行到这一行时,提示请按任意键继续... 然后继续执行命令;

ps: 第一次捣鼓bat,如有错误,欢迎指出,共同进步;


参考链接:

转载于:https://juejin.im/post/5b8e66096fb9a019e52e8fbb

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值