windows批处理命令:几个常用的bat脚本

windows批处理命令:几个常用的bat脚本

当前目录:

区别是,当以管理员身份登录时%cd%不一样,%~dp0一样

@echo off

echo 当前盘符:%~d0

echo 当前盘符和路径:%~dp0

echo 当前盘符和路径的短文件名格式:%~sdp0

echo 当前批处理全路径:%~f0

echo 当前CMD默认目录:%cd%

pause

调用其他bat脚本:

::/k新打开的cmd窗口在执行完命令后保存打开状态,如果希望执行完就关闭窗口就使用/c

start cmd /c call unzip.bat mysql-5.7.20-winx64.zip

::打印当前时间,=前后不能有空格

set date=%date:~0,4%%date:~5,2%%date:~8,2%

echo %date%

字符串分割:%%a代表分割后第一个字符,%%b代表分割后第二个字符

@echo off

setlocal enabledelayedexpansion

::定义一个以分号作为分隔的字符串

set str=%path%

echo %str%

::str的副本

set remain=%str%

:loop

for /f "tokens=1* delims=;" %%a in ("%remain%") do (

::输出第一个分段(令牌)

echo %%a

rem 将截取剩下的部分赋给变量remain,其实这里可以使用延迟变量开关

set remain=%%b

)

::如果还有剩余,则继续分割

if defined remain goto :loop

pause

字符串包含判断:判断是否已配置mysql环境变量

@echo off

title 查看path环境变量中是否包含mysql字符串

set flag=

echo %path%|findstr /c:"mysql">nul 2>nul&&set flag=true||set flag=false

echo.

echo %flag%

pause

屏蔽正确/错误输出

>nul 是屏蔽操作成功显示的信息,但是出错还是会显示(即1>nul)

2>nul 是屏蔽操作失败显示的信息,如果成功依旧显示。

>nul 2>nul 就是正确的错误的一起屏蔽掉,就啥也不显示了。

在最后面加1>nul 2>nul这样不管文件是否删除成功都不会显示任何消息。

例如:

del c:\test.txt 1>nul 2>nul

条件判断:前括号前要有空格,else后也要有空格

set flag=

echo %JAVA_HOME%|findstr /c:"mysql" >nul 2>nul&&set flag=true||set flag=false

if %flag%==false (

echo 测试结果:false

)else (

echo 测试结果:true

)

pause

上一条命令执行结果:ERRORLEVEl,0成功,1失败

copy C:\abc.bat E:\

if %ERRORLEVEl% == 0 (

echo operation succ %ERRORLEVEl%

)else (

echo operation fail %ERRORLEVEl%

)

pause

判断文件是否已存在

::判断是否已安装

IF EXIST "%mysql_path%"\bin\mysql.exe (

goto SETENV

)else (

goto UNZIP

)

解压,重命名

::解压

:UNZIP

echo.

echo ****正在解压文件****

echo.

echo %cd1%

rem start cmd /c call unzip.bat mysql-5.7.20-winx64 mysql

cd softwares

runas /user:administrator winrar x -ad mysql-5.7.20-winx64.zip ../installs

IF ERRORLEVEL 1 (

goto END

)

cd ..

cd installs

ren mysql-5.7.20-winx64 mysql

判断window服务是否存在:

@echo off

SC QUERY mysql56 > NUL

IF ERRORLEVEL 1060 GOTO NOTEXIST

GOTO EXIST

:NOTEXIST

ECHO not exist mysql56 service

GOTO END

:EXIST

ECHO exist mysql56 service

GOTO END

:END

pause

只有当我把服务启动的时候才能检查到存在。也就是说这个判断根本不是检查是否存在服务,而是判断是否启动服务了

@echo off

REM 将引号内部分改成你要查找的服务名称

sc query |find /i "MongoDB" >nul 2>nul

REM 如果服务存在,跳转至exist标签

if not errorlevel 1 (goto exist) else goto notexist

:exist

REM 这里写服务存在时用的代码

echo exist MongoDB server

goto :end

:notexist

REM 这里写服务不存在时用的代码

echo not exist MongoDB server

goto :end

:end

pause