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