您现在的位置是:网站首页> 编程资料编程资料

bat脚本常用命令及亲测示例代码超详细讲解_DOS/BAT_

2023-05-25 345人已围观

简介 bat脚本常用命令及亲测示例代码超详细讲解_DOS/BAT_

【内容】:

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

1、语句注释

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

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

2、暂停

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

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

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

3、输出和换行

echo后加内容即输出该内容,如:echo "welcome!";

echo.换行命令,即echo后加一个点

4、开启关闭回显

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

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

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

@echo off rem 格式:echo 文件内容>文件路径 echo @echo off>test1.bat ::其中>>在文末添加,>覆盖原内容 echo echo this is test>>test1.bat echo pause>>test1.bat rem 显示该文件内容 type test1.bat pause

6、设置标题title

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

 7、设置颜色

例:color 0A

8、if语句判断

特别特别注意:if语句块在执行时是当做一条语句加载的,故需要通过11中的延迟赋值来解决其内部变量引用的问题

::if常规用法,注意空格 @echo off :start set /p a= if not %a%==1 ( echo 请输入1 goto start ) else ( echo 输入正确 ) pause>nul 
@echo off if not exist d:\test.bat ( echo @echo off>d:\test.bat ) else ( del d:\test.bat ) pause>nul
@echo off set a=1 if defined a ( echo 已定义a ) else ( echo 未定义a ) pause>nul
@echo off set a=123 set b=abc set 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 off set /p a= ::当a小于10且大于0 if %a% lss 10 if %a% gtr 0 echo 输入的是0-10 pause
::'非'用not可以实现 @echo off set /p a= ::a不小于10 if not %a% lss 10 ( echo 输入的是不小于10 ) pause
::'或'实现一:使用if嵌套(代码简洁但逻辑不太好理解) @echo off set /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 off set /p a=请输入a: set /p b=请输入b: ::a小于5或b小于5时 set flag=0 if %a% lss 5 set flag=1 if %b% lss 5 set flag=1 if %flag% equ 1 ( echo a小于5或b小于5 ) else ( echo a、b都不小于5 ) pause

 9、goto语句跳转

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

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

@echo off set /p param=请输入密码: echo %param% pause

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

请特别注意这个机制,真的是特别恶心

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

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

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

注意:'变量名=值'中间不要有空格

@echo off ::将0赋值给b set b=0 echo b:%b% ::将空格和0赋值给a set a= 0 echo a:%a% ::无法赋值 set c =0 echo c:%c% pause

 12、set用法之系统变量

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

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

@echo off set a=1&set b=6 set c=%a%+%b% ::输出1+6 echo %c% set d=a+b ::输出a+b echo %d% set /a e=a+b ::输出7 echo %e% pause

14、for语句循环

@echo off ::关键字for、in、do必有,括号必有 ::分隔符可以是逗号、分号、等号、空格 ::输出为A换行1换行B。。。 for %%i in (A,B,C) do echo %%i & echo 1 pause>nul
@echo off ::找出D盘下所有文件 for %%i in (d:\*.*) do echo "%%i" pause
@echo off set str=c d e f g h i j k l m n o p q r s t u v w x y z echo 当前硬盘的分区有: for %%i in (%str%) do if exist %%i: echo %%i: pause
@echo off ::找出当前目录下文件名为四个字符的txt文件 for %%i in (????.txt) do echo "%%i" pause

15、变量%0--%9

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

::该文件名为test.bat @echo off echo 这是主程序第一个输出 timeout 2 start test1.bat param1 param2 timeout 2 echo 这是主程序第二个输出 pause
::该文件名为test1.bat @echo off timeout 2 echo 这是子程序第一个输出 echo 这是接收到的第一个参数%1 和第二个参数%2 pause
@echo off set /p param= if %param%==4 (echo 请不要输入4!) else (echo %param%) ::%0在当前窗口重新调用自身 %0

 16、切换目录

::@echo off ::显示当前目录 cd ::切换到根目录 cd\ ::盘符加冒号,切换到该盘 d: ::切换到e:hi目录下(目录名不区分大小写) cd /d e:\hi ::保存当前目录,并切换当前目录为d:\test pushd d:\test ::恢复当前目录为刚才保存的e:\hi popd pause

17、md命令创建文件夹

 ::创建文件夹 md e:\test\test1 ::文件夹名有空格需要加引号 md "e:\test op" ::空格隔开,创建多个 md e:\test1 e:\test9\test2 "e:\test5 lmn"

 18、rd命令删除文件夹

@echo off ::删除e:\test op下空文件夹,不为空不能删除 rd "e:\test op" ::删除e:\test9下所有文件夹,不管是否为空,但会询问是否确认删除[Y/N] rd /s e:\test9 ::自定义删除提示信息 echo 是否删除[Y/N]: & rd /s e:\test9>nul ::/s/q联合使用,不会询问直接删除 rd /s/q e:\test9

 19、move命令移动文件(夹)

@echo off ::文件夹移动,如果test文件夹存在,则将test5文件夹移动到test文件夹下 ::如果test文件夹不存在,则将test5文件夹移动到test1文件夹下并重命名为test ::注意:文件夹移动不能跨分区 move e:\test5 e:\test1\test ::将d:\test\1.txt文件移动到e:\下并重命名为23.txt ::如果该目录已存在23.txt,则会覆盖 move d:\test\1.txt e:\23.txt>nul&&echo 移动成功并重命名 ::将e:\23.txt文件移动到e:\test文件夹下 move e:\23.txt e:\test>nul&&ech
                
                

-六神源码网