关于windows批处理bat脚本编写
变量
定义变量
set
:定义变量
延迟变量
字符串处理
字符串匹配
字符串截取
if语句
for循环语句
for
:for循环语句
遍历文件路径时,要有通配符:
for /d %%i in (%apps_root%) do
结果:只打印了%apps_root%
路径
for /d %%i in (%apps_root%\*) do
结果:遍历当前路径下的子文件夹路径
使用for /f
命令:批处理脚本将命令执行结果赋值给变量,将其他命令的输出作为输入
格式:for /f " tokens=n delims=" %%i in ('command') do set b=%%i
for /f命令详解
tokens
:指定分隔后的命令执行结果取第几个元素作为最终结果delims
: 对命令执行结果按照指定的分隔符进行分隔的意思;`- “delims=” `–没有分隔符,所以会进行空格 分割,此时如果执行该命令返回多行数值,它会只取最后一行
''
:在bat中是引用命令的意思command
:是要执行的命令b
:是要把该命令执行的结果传给的变量
对命令执行结果进一步处理:
@echo off
rem 开启延迟环境变量 如:!IP! 不用%IP%
SETLOCAL ENABLEDELAYEDEXPANSION
for /f "delims=: tokens=1,2*" %%a in ('ipconfig')do (
if "%%a" EQU " IPv4 地址 . . . . . . . . . . . . " (
set IP=%%b
echo IP4:!IP!
)
)
pause
:: 1. 用for语句把执行结果每行的数据赋值给变量%%a %%b,分割为 “:”
:: 2. 使用判断%%a的值是否为所取列
:: 3. 最后赋值IP变量并输出
for /f "tokens=* delims= " %%i in ('%PLATE_JAVA% -version 2^>^&1 ^| findstr /i /c:"64-Bit"') do (set "BITS=%%i")
查看java进程
for /f "delims=" %%i in ('tasklist ^| findstr java' ) do (set str=%%i)
echo %str%
for /f "tokens=2 delims=;" %%a in ('%str% ^| findstr %MAINCLASS%' ) do (set PIDS=%%a)
set PIDS=%PIDS%
echo "PID: %PIDS%"
bat脚本中调用另一个bat文件
bat脚本中调用另一个脚本并获取另一个脚本中的变量:
使用前提:不开启delayedexpantion延迟变量
call
:call命令调用批处理程序
:: b1.bat
@echo off
for /f "delims=" %%i in ('call bat2.bat') do (
set "b2=%%i"
)
echo %b2%
pause
::b2.bat
@echo off
set b2=abcd bacsd
echo %b2%
查看进程
tasklist
:查看进程命令
tasklist查看与taskkill结束
使用:获得某个进程的pid号
for /f "tokens=2" %%a in ('tasklist^|find /i "Las2xyz"') do (set pid=%%a)
^|:对|转义;未加转义时,报错:此时不应有|。
在for命令中如果有特殊字符,需要转义,'^'是批处理文件的转义字符(当它被用作行的最后一个字符时,也是一个续行字符)。
判断进程是否存在
根据进程名称或PID查看相应的进程是否存在:
@echo off
set /p processStr=Please enter your process name or PID:
for /f "delims=" %%i in ('tasklist ^| findstr "%processStr%"') do set str=%%i
echo %str%
echo %str%|findstr "%processStr%" > nul
if %errorlevel% equ 0 (
echo The "%processStr%" process exists.
) else (
echo The "%processStr%" process doesn't exist.
)
pause
查看端口是否被其他进程占用:
@echo off
set /p portStr=Please enter your port:
for /f "delims=" %%i in ('netstat -ano ^| findstr "%portStr%"') do set str=%%i
echo %str%
echo %str% | findstr "%portStr%" > nul && (
echo The "%portStr%" port exists.
) || (
echo The "%portStr%" port doesn't exist.
)
pause
启动java服务
终端cmd窗口运行
后台启动
bat闪退
原因
关于运行bat文件闪退:这种情况一般是bat代码里有错误,没执行直接就退出了
解决方法
开始--运行--输入cmd--确定
:
- 打开一个cmd窗口
- cd bat所在盘符路径,例如cd /d d:minecraft
- 输入bat文件名运行批处理,这时能看到错误提示了