20230510-关于windows批处理bat脚本编写小结

本文详细介绍了Windows批处理脚本的编写技巧,包括变量定义、延迟变量、字符串操作如匹配和截取,以及if和for循环的使用。还涵盖了如何在bat脚本中调用其他脚本、检查进程是否存在、判断端口是否被占用,以及启动java服务的方法。同时,提到了bat脚本闪退的可能原因及解决策略,并提及了shell脚本转换为bat脚本的工具。
摘要由CSDN通过智能技术生成


变量

定义变量

set定义变量

延迟变量

延迟变量

字符串处理

字符串匹配

findstr命令使用教程

字符串截取

字符串截取

if语句

if命令详解

for循环语句

forfor循环语句
遍历文件路径时,要有通配符:

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延迟变量
callcall命令调用批处理程序

:: 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脚本启动java服务

后台启动

bat脚本后台启动jar包并输出启动日志文件

bat闪退

原因

关于运行bat文件闪退:这种情况一般是bat代码里有错误,没执行直接就退出了

解决方法

开始--运行--输入cmd--确定

  1. 打开一个cmd窗口
  2. cd bat所在盘符路径,例如cd /d d:minecraft
  3. 输入bat文件名运行批处理,这时能看到错误提示了

shell脚本转bat脚本工具

shell脚本在线转换Windows的bat脚本

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值