bat命令笔记

使用bat命令时,有时需要将多个步骤合并成一个bat命令一起执行。

1、同时启动三个bat命令,并用不同的窗口执行

start a.bat
start b.bat
start c.bat


2、在上一个bat命令执行完成后再执行下一个命令

call a.bat
call b.bat
call c.bat
或者

start /wait a.bat
start /wait b.bat
start c.bat
两者的区别在于,call是在当前窗口调用其他bat命令进行执行,start是新开一个窗口执行bat命令。

如果是普通的bat命令,可以使用第一种方法,但如果是例如启动tomcat之类的不会马上完成执行的bat,就需要使用start来另起一个窗口执行命令。

因为tomcat的startup.bat命令启动后,会一直在当前窗口写log,所以下一个命令就不会在tomcat停止前执行。

注:call命令用的不是很熟,需要进一步验证


3、设置定时等待时间

比较强硬的方式是设置固定等待时间:

ping -n 15 127.0.0.1>nul

中间的15是等待时间,单位为秒,就是等待15秒的意思。


4、设置临时环境变量

有时需要临时使用某些工具,可以设置临时的环境变量来暂时解决问题。

比如设置jre的环境变量:

set PATH=%PATH%;%cd%\jre1.8.0_112\bin
此命令只生效于当前bat窗口,关闭后失效

%PATH%是环境变量的意思,使用以下命令可以查看当前环境变量的值:

echo %PATH%

%cd%表示的是此bat命令所在的文件路径,如果bat的路径为D:\a\b.bat,则%cd%表示为D:\a

5、使用bat命令制作关闭server

很多server并没有关闭命令,只能在启动的窗口中使用Ctrl+C来关闭服务,如果想要用命令行关闭一个已经启动的server,就只能简单粗暴的杀进程了。

比如说sonar:

taskkill /FI "WINDOWTITLE eq SonarQube"
netstat -ano | findstr 9000| findstr "LISTENING">C:\TEST\sonar_status.txt
for /f "delims=" %%a in (C:\TEST\sonar_status.txt) do (
      set ipf=%%a
      echo !ipf!
)
echo %ipf:~-5%
taskkill /F /FI "PID eq %ipf:~-5%"
netstat -ano | findstr 9001>C:\TEST\sonar_status.txt
for /f "delims=" %%a in (C:\TEST\sonar_status.txt) do (
      set ips=%%a
      echo !ips!
)
echo %ips:~-5%
taskkill /F /FI "PID eq %ips:~-5%"

taskkill命令是用来杀进程的,具体命令可通过taskkill /?查看

taskkill /FI "WINDOWTITLE eq SonarQube"

第一句命令是用来关闭sonar窗口的,WINDOWTITLE的意思是窗口名称,eq表示匹配,可添加*;ne表示除此之外的所有,需慎用;

最后跟的名称是sonar启动窗口的名称,如果启动窗口没有具体名称的话,可在使用start命令启动时把窗口名称加上去:

start "SonarQube" SonarQube.bat


netstat -ano | findstr 9000| findstr "LISTENING">C:\TEST\sonar_status.txt

netstat命令用来查询sonar的端口号9000,并将所有正在运行的9000端口的进程都输入到sonar_status.txt文件内


for /f "delims=" %%a in (C:\TEST\sonar_status.txt) do (
      set ipf=%%a
      echo !ipf!
)

上一段命令就是将sonar_status.txt文件内的内容一行一行的提取出来,并且赋值到ipf变量上去

echo %ipf:~-5%

打印ipf最后5个字符到屏幕上
taskkill /F /FI "PID eq %ipf:~-5%"

根据ipf最后的5个字符杀掉进程

因为sonar会起两个端口,9000和9001,所以需要将9001端口也做同样的操作:
netstat -ano | findstr 9001>C:\TEST\sonar_status.txt
for /f "delims=" %%a in (C:\TEST\sonar_status.txt) do (
      set ips=%%a
      echo !ips!
)
echo %ips:~-5%
taskkill /F /FI "PID eq %ips:~-5%"

其实taskkill /F /FI "PID eq %ips:~-5%"命令最好要放到for循环里面去,但是一般来说一个端口号只会占用一个进程,所以无所谓里面外面,只看最后一行的的进程号就可以了。


6、if语句

不太用,只写个格式

tasklist|find /i "mysqld.exe"
if %errorlevel% == 0 (
mysqladmin shutdown -uroot -p123456
) else (
echo mysql is not run
)

tasklist列出所有进程

如果查到了mysqld.exe这个进程,则关闭mysql服务,否则,echo输出。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值