写点什么

bat 脚本常用命令及测试

作者:@下一站
  • 2022-12-04
    陕西
  • 本文字数:2205 字

    阅读完需:约 7 分钟

bat脚本常用命令及测试

注意:编辑bat文件请使用ANSI编码(不然会出现中文乱码)

1、语句注释::

rem 命令行注释,可以回显(语句会在命令行中显示);

::两个冒号,效果同上,但不会回显。(冒号后加任意非字母数字字符都可起到注释作用)

2、暂停 pause

pause 暂停,命令行中出现"请按任意键继续..."

自定义暂停时的文本,如下:

::pause>nul,隐藏原暂停文本echo 这里是自定义文本! & pause > nul
复制代码

3、开启关闭回显

@置于语句前则该条语句不会回显(无视 echo on)

echo off 关闭回显功能,直到出现 echo on,但其本身会回显,故其之前往往和 @一起使用,即 @echo off(关闭所有回显功能)

4、新建文件、增加文件内容

@echo offrem 格式:echo 文件内容>文件路径echo @echo off>test1.bat::其中>>在文末添加,>覆盖原内容echo echo this is test>>test1.batecho pause>>test1.batrem 显示该文件内容type test1.batpause
复制代码

5、设置标题 title

@echo off::title设置标题title 我测试一下!pause
复制代码

6、设置颜色

color 0A

7、if 语句判断

::if常规用法,注意空格@echo off:startset /p a=if not %a%==1 (	echo 请输入1	goto start) else (	echo 输入正确)pause>nul

@echo offif not exist d:\test.bat ( echo @echo off>d:\test.bat) else ( del d:\test.bat)pause>nul


@echo offset a=1if defined a ( echo 已定义a) else ( echo 未定义a)pause>nul


@echo offset a=123set b=abcset c=12::/i字符串大小写忽略if /i %b% equ ABC ( if %a% geq %c% ( echo %a%^>=%c% ) else ( echo %a%^<%c% )) else ( echo %b%不等于ABC)pause>nul
复制代码

如上的操作数可以是字符串、数值、变量;当参与比较的字符串是字符串时,将被转换为对于的 ASCII 码进行比较;比较运算符有如下:



if 语句中的'与'、'或'、'非'逻辑判断

::'与'一般用if嵌套实现@echo offset /p a=::当a小于10且大于0if %a% lss 10 if %a% gtr 0 echo 输入的是0-10pause

::'非'用not可以实现@echo offset /p a=::a不小于10if not %a% lss 10 ( echo 输入的是不小于10 )pause


::'或'实现一:使用if嵌套(代码简洁但逻辑不太好理解)@echo offset /p a=请输入a:set /p b=请输入b:::a小于5或b小于5时if %a% lss 5 (echo a小于5或b小于5) else (if %b% lss 5 (echo a小于5或b小于5) else (echo a、b都不小于5))pause


::'或'实现二:使用额外变量标记结果,再判断该变量(逻辑简单但代码多)@echo offset /p a=请输入a:set /p b=请输入b:::a小于5或b小于5时set flag=0if %a% lss 5 set flag=1if %b% lss 5 set flag=1if %flag% equ 1 ( echo a小于5或b小于5 ) else ( echo a、b都不小于5 )pause
复制代码

8、goto 语句跳转

@echo off::使用冒号加标记名作为goto语句的标记:startset /p param=if %param%==4 (echo 请不要输入4! & goto start) else (echo %param%)pause
复制代码

9、set 用法之接收用户输入数据

@echo offset /p param=请输入密码:echo %param%pause
复制代码

10、set 用法之定义变量和延迟赋值

::输出为1@echo offset a=1set a=2&echo %a%pause

注意:批处理在运行“set a=2&echo %a%”之前,会先把这一句整句读取并做了预处理,即对变量a赋了值,那么%a%值为1,为解决该问题,批处理设计了变量延迟。也就是说,在读取了一条完整的语句之后,不立即对该行的变量赋值,而会在某个单条语句执行之前再进行赋值,具体实现如下:

::输出为2@echo off&setlocal enabledelayedexpansionset a=1set a=2&echo !a!pause

注意:'变量名=值'中间不要有空格
@echo off::将0赋值给bset b=0echo b:%b%::将空格和0赋值给aset a= 0echo a:%a%::无法赋值set c =0echo c:%c%pause
复制代码

11、set 用法之系统变量

@echo off::查看所有环境变量echo ----------------ALL----------------------setecho ----------------END----------------------::查看环境变量JAVA_HOME的值if defined JAVA_HOME ( echo JAVA_HOME:%JAVA_HOME% ) else ( echo 未定义JAVA_HOME )pause
复制代码

12、set 用法之定义数字表达式

@echo offset a=1&set b=6set c=%a%+%b%::输出1+6echo %c%set d=a+b::输出a+becho %d%set /a e=a+b::输出7echo %e%pause
复制代码

13、for 语句循环

@echo off::关键字for、in、do必有,括号必有::分隔符可以是逗号、分号、等号、空格::输出为A换行1换行B。。。for %%i in (A,B,C) do echo %%i & echo 1pause>nul


@echo off::找出D盘下所有文件for %%i in (d:\*.*) do echo "%%i"pause

@echo offset str=c d e f g h i j k l m n o p q r s t u v w x y zecho 当前硬盘的分区有:for %%i in (%str%) do if exist %%i: echo %%i:pause

@echo off::找出当前目录下文件名为四个字符的txt文件for %%i in (????.txt) do echo "%%i"pause
复制代码

14、变量 %0--%9

%0 指该文件本身,%1--%9 为接收到的参数,如下例子中子程序的 %1 即为主程序传输的 param1,%2 即为 param2

::该文件名为test.bat@echo offecho 这是主程序第一个输出timeout 2start test1.bat param1 param2timeout 2echo 这是主程序第二个输出pause

::该文件名为test1.bat@echo offtimeout 2echo 这是子程序第一个输出echo 这是接收到的第一个参数%1 和第二个参数%2pause

@echo offset /p param=if %param%==4 (echo 请不要输入4!) else (echo %param%)::%0在当前窗口重新调用自身%0
复制代码


发布于: 刚刚阅读数: 4
用户头像

@下一站

关注

懒人 2020-11-22 加入

都是黄泉预约客,何必难为每一天,执念太强,无法豁然。

评论

发布
暂无评论
bat脚本常用命令及测试_软件开发_@下一站_InfoQ写作社区