rem test.bat
rem 传递参数demo
set test1=%1
@echo %0
@echo %1
@echo test1----%test1%
@echo %2
使用windows自带的帮助工具查询相关语法
注:命令 /? >> 文件路径+文件名.txt可以将内容输出到指定的路径下的指定文件
语法:以下三种为常见的帮助命令语法
语法 echo [no|off] [message]
一般dos命令行没有加@符号,该命令会打印在命令行窗口很影响观看。所以会在bat文件头部使用@echo no来隐藏下面所有echo命令,这样下面的echo命令就不需要加@符号。
上面的例子可以改成这样
echo off
rem test.bat
rem echo命令demo
set test1=%1
echo %0
echo %1
echo test1----%test1%
echo %2
执行结果会多显示一行echo off
用于隐藏当前行的dos命令。常用于bat文件开头,组合echo off一直使用可以全局隐藏dos命令。
@echo off
rem test.bat
rem echo命令demo
set test1=%1
echo %0
echo %1
echo test1----%test1%
echo %2
只会输出变量0,1,2的值,不会输出dos语句
语法:goto 标签行名
例如:
@echo off
set test1=%1
if /I "%test1%" == "1" goto value2
echo %0
echo %1
echo test1----%test1%
:value2
echo %2
执行结果:
当变量1等于1时,跳到后面只输出变量2的值。不等于1就按顺序执行。
常用于bat文件中用于添加关于bat文件的注释和代码解释信息。并且不会显示在执行框中。
例如
@rem 这是个bat文件
执行到该命令时,会暂停并且等待用户下一步操作之后再执行后续dos命令。
@echo off
rem pause命令demo
:again
echo 123
pause
goto again
可以用于调用外部的批处理文件,并且执行完后依旧会返回父批处理文件继续执行,不用call则不会执行父批处理文件后续dos命令。
注意:子批处理文件不可以使用exit命令。
语法:call [绝对路径(盘符+文件路径)] [文件名称+后缀] [参数]
例如:
@echo off
rem test.bat
rem call命令demo
echo test批处理文件
call F:\test1.bat
exit
@echo off
rem test1.bat
rem call命令demo
echo test1批处理文件
执行结果:
可能有人会遇到打印不出来中文或者中文乱码,这时候只需要将文件内容转码成ansi编码即可。
使用notepad打开bat文件–编码–转为ansi编码。
查看右下角文件内容编码,如果是utf-8那么在命令行打印就会乱码,因为命令行是gbk编码。
用于调用外部批处理程序和dos命令行程序
常用参数:
语法:start /xx /xx 文件路径+文件名.后缀 参数
注:当文件名有空格时,在路径中使用双引号进行包括。(“program files”)
例如:
@echo off
rem test.bat
start /MIN /wait F:\test1.bat
exit
@echo off
rem test1.bat
rem start命令demo
echo test1批处理文件
pause
语法:if [not] “%变量%” == “值” 待执行dos命令
例如:
@echo off
set test1=%1
if /I "%test1%" == "1" goto value2
echo %0
echo %1
echo test1----%test1%
:value2
echo %2
当变量1等于1时,就跳到value2后执行。
语法:if [not] exist 文件路径+文件名+后缀 待执行dos命令
例如:
--如果存在test1就打印出来
if exist F:\test1.bat type F:\test1.bat
语法:if [not] errorlevel 数字 待执行dos命令
根据程序执行的返回码进行判断执行不同的dos命令,一般为0或1。
@echo off
XCOPY F:\test.bat D:\
IF ERRORLEVEL 1 (ECHO 文件拷贝失败
) Else IF ERRORLEVEL 0 ECHO 成功拷贝文件
pause
XCOPY命令详解(XCOPY /?查询相关语法)
1.功能:复制指定的目录和目录下的所有文件连同目录结构。
2.类型:外部命令
3.格式:XCOPY [源盘:]〈源路径名〉[目标盘符:][目标路径名][/S][/V][/E]
4.使用说明:
(1)XCOPY是COPY的扩展,可以把指定的目录连文件和目录结构一并拷贝,但不能拷贝隐藏文件和系统文件;
(2)使用时源盘符、源目标路径名、源文件名至少指定一个;
(3)选用/S时对源目录下及其子目录下的所有文件进行COPY。除非指定/E参数,否则/S不会拷贝空目录,若不指定/S参数,则XCOPY只拷贝源目录本身的文件,而不涉及其下的子目录;
(4)选用/V参数时,对的拷贝的扇区都进行较验,但速度会降低。
语法: if 条件 (成立时执行的命令) else (不成立时执行的命令)
注:如果 else 的语句需要换行,if 执行的行尾需用“^”连接,并且 if 执行的动作需用(括起来),否则报错
例如:
if 1 == 0 ( echo comment1 ) else if 1==0 ( echo comment2 ) ^
else (echo comment3 )
让用户输入一个字符,根据字符执行不同的dos命令。(choice /? 获取语法)
其中常用:
/M为自定义提示消息
/C 指定创建选项列表默认为yn
/N隐藏选项,默认不隐藏
例如:
@echo off
:check
CHOICE /C abcd /M "选项 1 请选择 a,选项 2 请选择 b,选项 3 请选择 c,选项 4 请选择 d。"
if errorlevel 255 echo 错误
@rem errorlevel 判断是优先数值小的,也就是234也满足1,所以必须倒序判断errorlevel
if errorlevel 4 goto actionD
if errorlevel 3 goto actionC
if errorlevel 2 goto actionB
if errorlevel 1 goto actionA
:actionA
echo aaa
goto check
:actionB
echo bbb
goto check
:actionC
echo ccc
goto check
:actionD
echo ddd
goto check
pause
goto check
exit
主要用于参数在指定的范围内循环执行命令。
语法:for /?查看篇幅较多
查看当前目录下的bat文件
for %c in (*.bat) do (echo %c)