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对特殊字符处理不好.


  • 相关阅读:
    模拟赛总结
    2018.04.06学习总结
    2018.04.06学习总结
    Java实现 LeetCode 672 灯泡开关 Ⅱ(数学思路问题)
    Java实现 LeetCode 671 二叉树中第二小的节点(遍历树)
    Java实现 LeetCode 671 二叉树中第二小的节点(遍历树)
    Java实现 LeetCode 671 二叉树中第二小的节点(遍历树)
    Java实现 LeetCode 670 最大交换(暴力)
    Java实现 LeetCode 670 最大交换(暴力)
    Java实现 LeetCode 670 最大交换(暴力)
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/2998621.html
Copyright © 2011-2022 走看看