zoukankan      html  css  js  c++  java
  • windows下的bat编写经验笔记

    平时用得最多的还是windows,

    快速批量执行某些操作,还是需要有的.

    所以.想方便,有时还是得写个bat来运行.

    这就需要bat的语法了.

    但是bat的语法就像之前的vb风格,有点难明白,不想js,php之类这么易用.

    这里的经验可能很乱,但是我只写一下我遇到的问题,是经过测试才明白的,且直接 命令 /?是看不出来的那种,才值得说.

    后面会不停的补充


    1. 怎么方便的从一串字符中分析出目录/基本文件名/后缀名?

    set kkk=c:\qidizi\kdkdkkd.qdz
    echo off
    call :spli "%kkk%"
    goto :EOF
    exit
    
    :spli
    	set fp=%~1
    	set dp=%~dp1
    	set pbn=%~n1
    	set px=%~x1
    	echo.
    	echo "%fp%" "%dp%" "%pbn%" "%px%"
    	goto :EOF
    :eof_spli


    call后,

     结果

    "c:\qidizi\kdkdkkd.qdz" "c:\qidizi\" "kdkdkkd" ".qdz"


    2. switch与default式的实现

    原理是把所有的拼上,call失败它会设置

    :ch
    title 选择操作
    set ch=exit
    echo 工具箱
    echo.
    echo 序号 对应任务
    echo.
    echo 1 adb
    echo 2 logcat
    echo 3 重启
    echo 4 上传文件
    echo 5 签名
    echo 6 安装apk
    echo 7 卸载apk
    echo 8 反编AndroidManifest.xml
    echo 9 odex转apk包内classes.dex
    echo 其它 退出
    echo.
    echo 请输入上面序号数字后,回车即可完成操作的选择
    echo.
    set /p ch=
    :eof_ch
    cls
    set /a ch*=1
    call :callLabel%ch%
    IF %ERRORLEVEL% LEQ 0 goto ch
    echo.
    echo 本程序即将退出...稍息自动关闭窗口
    ping 127.0.0.1 -n 2 >nul
    GOTO :EOF
    exit


    3 延时

    因为bat是一行一行解释的,

    ping 127.0.0.1 -n 3 >nul

    延时大概是3秒?一ping花一秒?


    4 验证是否有某功能,且不导致bat出错退出

    call :javaTest
    goto eof_javaTest
    
    :javaTest
    set ea=%ERRORLEVEL%
    echo 运行环境值当前是:%ea% 
    java.exe -version
    set eb=%ERRORLEVEL%
    echo 测试java环境后,运行环境值是:%eb%
    
    if %ea% EQU %eb% (
    	cls
    	goto :EOF
    ) else (
    	echo 运行环境测试前后不同[java出错影响]:%ea% != %eb%
    	echo 证明没有java环境,无法进行签名,请安装java再使用
    )
    goto :EOF
    :eof_javaTest
    


    5 func形态? 那就是上面的call :xxx,可以多次调用,只是编写时,注意goto ,别死在那里即可,func结束时别用exit,要用goto :EOF,这是退出call层,但是不会中止bat


    6 判断某句运行结果?

    echo 查找是否有处于recovery状态的手机
    %adb% devices|find "recovery"
    echo 结果意义:
    echo 0: 表示,有此状态的手机连结着;
    echo 1: 表示,无此状态的手机;
    echo 查找结果:
    echo %ERRORLEVEL%
    
    if %ERRORLEVEL% EQU 0 (
    	echo.
    	echo 发现有手机处于recovery模式,进入上传步骤
    	goto startUpload
    )
    
    echo 未找到处于recovery状态的手机
    echo.

    还有就是运行完命令后,直接检测环境变量

     %ERRORLEVEL%

    7 换行(空行)

    echo.

    注意echo 不能直接写换行,只能后面跟紧个句点号.


    8 if 与 for之类的块代码

    if "ddd" == "" (

     echo 都是 if中

    ecoh 也是if中

    ) else (

    )

    注意 (的左边必须跟着上行,else不能换行写

    (

     这里不能再写(),否则解析时,会使用紧跟的,

    )

    if "" == "" (
        echo (ddd)
    ) else (
        echo a
    )
    echo b


    第一句只出来 (ddd,非(ddd)


    9 比较非空字符 if "%input%" == ""


    10 变量赋值 set var=,注意=号紧跟变量名


    11 set /p input=直接回车,并不会改变input的值

    :re
    set /p input=
    echo %input%
    goto re


    第一轮输入 loop1

    出来loop1

    第二轮直接回车.

    还是出来loop1

    可以

    set input=

    set /p input=

    来防止


    12

     在cmd中直接输入时for使用一个%,

    for /F "usebackq" %i in (`dir`) do echo %i

    放到bat时,得二个%

    for /F "usebackq" %%i in (`dir`) do echo %%i

    13

    for 的引号是与~同一键的符号,非''单引,或是""双引

    for /F "usebackq" %%i in (`dir`) do echo %%i

    14

    for 的块代码如下,也是(紧跟

    for /F "usebackq" %%i in (`dir`) do (

       echo %%i

    )


    10 判断输入 set /p input=,并给新的变量,这里不能直接写 set n=%input%,因为bat对特殊字符处理不好.


  • 相关阅读:
    react 学习
    redux saga学习
    Power BI连接至Amazon Redshift
    php时间日期
    layui select 禁止点击
    微信小程序二维码是无法识别二维码跳转到小程序
    JSON字符串与JSON对象的区别
    前端切图要选择png和jpg呢?
    @media媒体查询
    TortoiseGit revert failed
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/2998621.html
Copyright © 2011-2022 走看看