shell脚本(.bat文件)

叶卓君
2023-12-01
模板:
显示界面设计(开始):
@echo off
title xueqiang
color 07
mode con cols=113 lines=40

人机交互:
echo updating tp firmware
set 
a=4
echo %a% 
set /p name= please enter your name:

判断和循环语句:
if %name%==xueqiang (
echo right name!
) else (
echo error name please enter again!
)
if %errorlevel% equ 0 do something
for /l %%i in (1,1,5) do (
    echo %%i
)

标签:
goto error   //跳转
call :error    //调用,还要回头,需要按任意键才继续
:error
延时:
timeout 1 > nul 

文件操作语句(增删改查):
增
if exist D:\MARK_XUE\file1 echo wenjian cunzai! 
md D:\MARK_XUE\file1
cd D:\MARK_XUE\file1
echo 123456 > D:\MARK_XUE\file1\test.txt
echo 78910 >> D:\MARK_XUE\file1\test.txt
copy D:\MARK_XUE\file1\test.txt D:\MARK_XUE\file1\test2.txt
copy D:\MARK_XUE\file1\test.txt + D:\MARK_XUE\file1\test2.txt D:\MARK_XUE\file1\new.txt
删
del D:\MARK_XUE\file1\test.txt
rd D:\MARK_XUE\file1
改
echo change the content > D:\MARK_XUE\file1\test.txt
ren D:\MARK_XUE\file1\test2.txt xiao.txt
ren D:\MARK_XUE\xue FILE2
查
cd         //显示当前目录
type D:\MARK_XUE\file1\new.txt
find "1" D:\MARK_XUE\file1\new.txt
dir c:\;d:\ >>a.txt

拼接网络:
ping www.baidu.com -t
ping 192.168.0.225

调用外部程序:
start    //调用外部程序的命令,可以打开文件,也可以运行程序.exe;
start explorer d:\             //调用图形界面打开D盘;
start D:\MARK_XUE\bat.txt    //执行start时将开启一个新线程来执行该程序,原程序不受影响继续执行
call notepad.exe  //call 也可以调用应用程序和start一样;

弹框:
msg * /time:5   你的信息有误!    //弹出一个弹框“你的信息有误!”;显示时间为5s,
(echo until wait you
echo close after 5s)|msg %username% /time:5    //显示一个弹框,两行文字。
call test.bat x  y   //在当前批处理中运行子批处理代码,子脚本执行完后继续执行本程序之后的代码
                     //a.bat 调用b.bat那b.bat中有goto :eof或者exit,前者是退到代码最后一行,也就是跳出该脚本,后者直接退出a.bat

服务操作:
sc stop MySQL   //关闭/启动MySQL服务,执行该条语句后会立即执行之后的代码,不会等待停止/启动的过程
sc start MySQL
sc config MySQL start= auto    //设置MySQL服务为自启动,demand手动,disabled禁用
sc create MySQL binPath= "F:\installFiles\mysql-5.7.1.exe"       //安装服务
sc delete MySQL       //卸载服务(卸载前先关闭服务)
net start MySQL     //关闭/启动MySQL服务,等待停止/启动的过程,完成后执行之后的代码
net stop MySQL
net start   //查看所有运行的服务

结束:
pause
echo  自定义代码结束显示语句
pause>nul

参考网页:https://www.jb51.net/article/151923.htm           内容详细教科书级

https://blog.csdn.net/WZH577/article/details/100512784        实例分析,更加注重实战

 

举例novatek的固件升级的bat脚本:

            @echo updating tp firmware           //关闭命令行显示;echo off 表示关闭显示,@echo off  表示不显示 echo off本身

            :: 这段代码为测试代码                 //rem 和::为注释命令,后面加注释;
            echo welcome to use                     //输出welcome to use 字符,ECHO + 信息内容;
            adb push  nt36525b /data/local/tmp/             //运行命令
            adb push nt36525b.bin /data/local/tmp/
            adb shell "cd /data/local/tmp/;chmod 777 nt36525b"        
            echo=======update fw start========
            adb shell "cd /data/local/tmp/;./nt36525b -u nt36525b.bin"   //分号作为命令分隔符
            echo===========update end===============
            adb shell "cd /data/local/tmp;./nt36525b -v"
            echo press any key to exit....
            pause                          //运行显示:请按任意键继续. . .要显示其他提示语,可以这样用:Echo 其他提示语 & pause > nul

pause>nul          //屏蔽:请按任意键继续. . .

批处理就是运用一些含有特殊意义的符号和一些完成指定功能的命令组合而成

echo. //输出空行,即相当于输入一个回车,ECHO后紧跟.,没有空格

echo %errorlevel%     //每个命令运行结束,可以用这个命令行格式查看返回码,运行正常为0;

title 新标题     //可以看到cmd窗口的标题栏变了

C:>ECHO @ECHO OFF>AUTOEXEC.BAT              //建立自动批处理文件,新建文件:ECHO 文件内容>文件名
C:>ECHO C:\CPAV\BOOTSAFE>>AUTOEXEC.BAT        //向自动批处理文件中追加内容,追加文件内容:ECHO 文件内容>>文件名;

C:>ECHO +156+42+116>;PRN    //<Alt>156是按住Alt键在小键盘键入156 42 116;向打印机输出打印内容或打印控制码:ECHO 打印机控制码>;PRN

C:>ECHO.>;PRN(换行)

C:>ECHO ^G      //使喇叭鸣响;这个亲测可以:echo  加正方形符号

mode con cols=113 lines=40 & color 07    //此命令设置DOS窗口大小:15行,113列,背景为黑色,字体为白色;;

:start   //:表示这个字符串为标签;

goto start   //表示跳转;

set a=4      //先给变量a赋值为4;

set /p var=请输入变量的值          //用set命令的/p参数,让用户手工输入变量的值,而不是在代码里指定,等号和var之间没有空格;

set /a var+=1         //    /a参数 是指定一个变量等于一串运算字符;

set a=5 & echo %a%                  //&为运行指令连接符,echo %a% 打印变量a的值,shell脚本有变量延迟,即要这整条语句执行                                                     //完成后,才会对a变量赋值5;

set var1=%var2% & set var2=%var1%         //这个就是利用了变量延迟来进行的两个变量交换值,很方便;引用变量用%var%

                                1.   //下面就是可以添加setlocal和! !组合可以实现实时赋值

                  setlocal enabledelayedexpansion

                  set a=4

                  set a=5 & echo !a!

                                 2.   举例for循环就需要实时赋值;

                  @echo off

                 setlocal enabledelayedexpansion

                 for /l %%i in (1,1,5) do (

                 set a=%%i

                 echo !a!

                 )

                 pause

find "111" test.txt    //在文件中查找字符串“111”;

del test.txt    //删除文件test.txt;

type test.txt|find "111"     //和上面查找字符串一样;

assoc .txt=Word.Document.8      //设置.txt为word类型的文档,   assoc .txt  为显示.txt文档的类型,也可以显示.doc  .exe等

if exist autoexec.bat echo 文件存在!      //判断文件是否存在
if not exist autoexec.bat echo 文件不存在!     //

if  not {string1}=={string2} command            //判断两个变量是否绝对相等,必须是两个“=”符号;
if [string1]==[string2] command           //
if  /i "string1"=="string2" command        //添加 /i  就不区分大小写了;

if errorlevel 1 goto 1            //判断errorlevel的值是否为1,是的话执行goto语句;

if  %errorlevel% 0 goto 0              //

md autorun     //创建文件夹 autorun

cd autorun   //进入文件夹autorun
copy %0 d:\wind.bat            //最简单的复制文件自身的方法,%0 批处理文件本身,包括完整的路径和扩展名;

dir c:\|find "txt"         //查找C:\所有,并发现TXT字符串。"|"是命令管道符;

attrib +r +a +s +h autorun     //设为只读,存档、系统、隐藏    文件属性;

echo y|format a: /s /q /v:system         //
        用过format的都知道,再格盘时要输入y来确认是否格盘,这个命令前加上echo y并用|字符来将echo y的结果传给format命令

^    //转义字符,每行末尾还有一个看不见的符号,即回车符,转义字符位于行尾时就让回车符失效了,从而起到了续行的作用

dir z:\ & dir y:\ & dir c:\         //以上命令会连续显示z,y,c盘的内容,不理会该盘是否存在,如果换成&&,则第一条命令执行失败后不执行其他命令;如果换成  ||  则是第一条命令执行失败后才会执行下面的命令;优先级:管道命令的优先级高于重定向命令,重定向命令的优先级高于组合命令;

dir c:\;d:\ >>a.txt   //这个就不用看优先级,把C盘和D盘的文件和文件夹列出到a.txt文件中

del test.txt     //删除文件test.txt

type test1.bat    //显示该文件内容;

if defined JAVA_HOME echo %JAVA_HOME%        //defined表示已经声明;

a.创建文件夹:                          md    D:\mybat       //将在D盘下创建一个名为 mybat的文件夹

b.删除文件夹:                         rd      D:\mybat        //将删除D盘中的mybat文件夹删除 
c.删除文件夹中的文件:           del     D:\mybat\sheepmu.txt          //删除文件sheepmu.txt   
                                                   del     D:\mybat\sheepmu.txt    /q            //安静模式删除,即删除时不弹出是否删除的提示框 
d.复制文件 :                   xcopy   D:\mybat\sheepmu.txt    D:\mybat1          //若D中无mybat1这个文件夹则会创建文件夹再复制 

copy d:\test\test.txt e:\test1\test2.txt            //拷贝并且重命名

copy 129.txt+156.txt new.txt            //:将129.txt和156.txt两个文件内容合并存入新建的new.txt中

f.显示文件中内容:                  type    D:\mybat\sheepmu.txt

g.更改文件(夹)名后缀:                   ren    D:\mybat\*.txt   *.html 

move d:\test\1.txt e:\23.txt     //移动成功并重命名,不能跨分区;

  1. cd         //::显示当前目录

  2. cd\           //::切换到根目录

  3. d:         //::盘符加冒号,切换到该盘

  4. cd /d e:\hi         //::切换到e:hi目录下(目录名不区分大小写)

  5. pushd d:\test       //::保存当前目录,并切换当前目录为d:\test

  6. popd          //::恢复当前目录为刚才保存的e:\hi

 

timeout 1 > nul      //延迟1秒

msg * /time:5   你的信息有误!    //弹出一个弹框“你的信息有误!”;显示时间为5s,

//msg {UserName|SessionName|SessionID|@FileName|*}    [/server:ServerName]     [/time:seconds]      [/v] [/w] [message]

call 从批处理程序调用另一个批处理程序.bat

//在批处理中,可以使用%*代表所有参数%1-%9代表9个参数,%0代表批处理自己

call test1.bat param1 param2            //在当前程序中运行子脚本代码,子脚本执行完后继续执行本程序之后的代码

start    //调用外部程序的命令,start explorer d:\ 调用图形界面打开D盘;

start e:\test.txt       //执行start时将开启一个新线程来执行该程序,原程序不受影响继续执行

call :start          //调用标签,会把标签后面的都执行完,然后再回到调用标签后面继续执行,不过需要enter;和goto不一样,goto                          //是跳转;

call notepad.exe  //call 也可以调用应用程序和start一样;

 

ping 192.168.0.225       //ping + 地址


sc stop MySQL         //关闭/启动MySQL服务,执行该条语句后会立即执行之后的代码,不会等待停止/启动的过程
sc start MySQL
sc config MySQL start= auto    //设置MySQL服务为自启动,demand手动,disabled禁用
sc create MySQL binPath= "F:\installFiles\mysql-5.7.1.exe"       //安装服务

sc delete MySQL       //卸载服务(卸载前先关闭服务)
net start MySQL     //关闭/启动MySQL服务,等待停止/启动的过程,完成后执行之后的代码
net stop MySQL
net start   //查看所有运行的服务

 

1.       if 条件语句:

比较运算符:

equ - 等于
neq - 不等于
lss - 小于
leq - 小于或等于
gtr - 大于
geq - 大于或等于

例如:

if %errorlevel% equ 0 (
echo "1"
) else (              //else必须跟前面的 if 或者 if 里的括号在同一行;
echo on
echo. "0"
)

 

2.          for 循环语句

第一:指定次数循环

关键字for、in、do必有,括号必有;    分隔符可以是逗号、分号、等号、空格;

for /L %%variable in (start,step,end) do (
Command1
Command2
……
)

例如:

    for /l %%i in (1,1,5) do (

           set a=%%i

    )

 

 类似资料: