常用批处理内部命令简介
批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD。这些命令统称批处理命令。
1、REM 和 ::
REM为注释命令,一般用来给程序加上注解,该命令后的内容不被执行,但能回显。:: 也可以起到rem 的注释作用, 而且更简洁有效;
2、ECHO 和 @
ECHO打开回显或关闭回显功能格式:echo [{ on|off }],@放在命令钱将关闭该命令的回显。如果想关闭“ECHO OFF”命令行自身的显示,则需要在该命令行前加上“@”
Tip:1)输出空行,即相当于输入一个回车 格式:ECHO.
2)答复命令中的提问 格式:ECHO 答复语|命令文件名
3)建立新文件或增加文件内容 格式:ECHO 文件内容>文件名 ECHO 文件内容>>文件名
3、PAUSE
PAUSE 暂停的意思 在这里就是停止系统命令的执行并显示下面的内容。
Tip:其他提示语,可以这样用: Echo 其他提示语 & pause > nul
4、errorlevel
程序返回码 echo %errorlevel% 每个命令运行结束,可以用这个命令行格式查看返回码 用于判断刚才的命令是否执行成功 默认值为0,
5、title
设置cmd窗口的标题 title 新标题
6、COLOR
设置默认的控制台前景和背景颜色。颜色属性由两个十六进制数字指定 -- 第一个为背景,第二个则为 前景
0 = 黑色 8 = 灰色 1 = 蓝色 9 = 淡蓝色 2 = 绿色 A = 淡绿色 3 = 湖蓝色 B = 淡浅绿色 4 = 红色 C = 淡红色 5 = 紫色 D = 淡紫色 6 = 黄色 E = 淡黄色 7 = 白色 F = 亮白色
7、mode
配置系统设备 显示模式: MODE CON[:] [COLS=c] [LINES=n] 如:mode con cols=100 lines=15 & color 0C
8、GOTO 和 :
在批处理中允许以“:XXX”来构建一个标号,然后用GOTO XXX跳转到标号:XXX处,然后执行标号后的命令。
::@echo.
@rem 1,rem符号
@rem @符号表示命令行执行回显关闭
@rem 2,echo符号
@echo ########## Dos Command #########
@rem 切换当前路径D:\bat\
@D: & cd\bat\
::@rem 显示echo打开状态
::@echo
::@echo This is Dos Command!!!
::@rem dos命令行下直接键入echo off即可关闭提示符屏幕只剩下光标字符,键入echo on即可开启屏幕提示符
::@rem echo.相当于输入回车.符号必须紧跟echo 另外“.”可以用,:;”/[\]+等任一符号替代
::echo.
::echo;
::@rem echo.相当于输入回车
::@rem 管道命令使用
::echo.|time
@rem 建立新文件或增加文件内容
::@echo @echo off>D:/bat/autostart.bat
::@echo Hello world!>>D:/bat/autostart.bat
::@echo Hello world!>>D:/bat/autostart.bat
::@type autostart.bat
@rem 3,errorlevel符号
@rem 程序返回码或上条语句执行结果,正确执行为0,错误为1或其他
::@echo %errorlevel%
@rem 5,title符号
@rem 设置cmd窗口的标题
title DosCommandTest...
@rem 6,color符号
@rem COLOR 设置默认的控制台前景和背景颜色 颜色属性由两个十六进制数字指定 -- 第一个为背景,第二个则为 前景
color 0C
::@echo %errorlevel%
@rem 7,mode符号
@rem mode 配置系统设备 显示模式: MODE CON[:] [COLS=c] [LINES=n]
::@mode con cols=113 lines=15 & color 9f
@rem 8,goto符号
@rem goto跳转语句
::@echo.
::@echo loop:
:::loop
::set /a var+=1
::@echo %var%
::if %var% leq 3 goto loop
@rem 9,find符号
@rem find string
@rem 格式:FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] "string" [[drive:][path]filename[ ...]]
@rem /V display not include line
@rem /C display only string include line
@rem /N display line
::type D:\bat\autostart.bat
::find /V "@echo" D:\bat\autostart.bat
::find /C "Hello" D:\bat\autostart.bat
::find /N "Hello" D:\bat\autostart.bat
::find /I "ECHO" D:\bat\autostart.bat
::echo find and type:
::type D:\bat\autostart.bat | find "Hello"
@rem DEL符号
@rem DEL [drive:][path]filename
::echo DEL:
::del D:\bat\autostart.bat
::echo del D:\bat\autostart.bat
::echo return:%errorlevel%
@rem 10,start符号
@rem 调用程序独立运行
::start explorer D:\bat\
::explorer D:\bat\
@rem 11,assoc and ftype符号
@rem assoc 设置 文件扩展名 关联
@rem 设置 文件类型 关联
::assoc .txt
::assoc .exe
::assoc .bat
::ftype exefile
::ftype txtfile
::ftype batfile
::ftype python.file
@rem 设置.txt为txtfile
::assoc .txt=txtfile
::ftype txtfile="D:\Python27\python.exe" "%1" %*
::start D:\bat\txt.txt
@rem 12,pushd and popd
@rem pushd保存当前路径,popd恢复保存路径
@rem & 多条指令执行
::D: & cd\bat\ & md mp3
::D: & cd\bat\ & rmdir mp3
::D: & cd\bat\ & start txt.txt
::D: & cd\bat\ & md mp3
::md D:\bat\mp4
::cd /d D:\bat\mp4
::dir
::pushd D:\bat\mp3
::dir
::popd
::md mp44
@rem 13,CALL
@rem 调用另一批处理.bat/.cmd,执行完后继续执行当前批处理
::D: & cd\bat & call echo
::D: & cd\bat & call echo.bat
@rem CALL Command
@rem 调用批处理命令,可根据条件生成命令字符串,用call调用
@rem 函数名字符串拼接
::set arg=123
::set cmdstr=:loop %arg%
::call %cmdstr%
::set arg=123
::set funName=:loop %arg%
::call %funName%
@rem CALL :lable arguments
@rem 调用文件内命令段,相当子程序 以:lable 开头,goto:eof结尾
@rem call:loop 12345678
@rem D: & cd\bat\
@rem call:loop bat.bat
@rem 皮参数(%n)替代增强
@rem %~1 del“,expand %1
@rem %~f1 %1 to full path
@rem %~d1 %1 to drive
@rem %~p1 %1 to path
@rem %~n1 %1 to file name
@rem %~x1 %1 to file expand name
@rem ...
@rem 注:参数扩展是不理会参数所代表的文件是否真实存在,均以当前的目录进行扩展
@rem 14,shift
@rem 更改批处理文件中可替换参数的位置
::shift /1
::call :loop 1 2 3 4 5
@rem 15,IF
@rem IF 条件判断语句
@rem IF [NOT] ERRORLEVEL number command
@rem IF [NOT] string1==string2 command
@rem IF [NOT] EXIST filename commmand
@rem IF ERRORLEVEL 放在命令行后判断返回值
@rem 取值0~255
@rem 判断值应由大到小
@rem 返回值大于等于指定值时,条件成立
::D: &CD\BAT
::ECHO RETURN:%ERRORLEVEL%
::IF ERRORLEVEL 1 GOTO 1
::IF NOT ERRORLEVEL 1 GOTO 1
::IF ERRORLEVEL 0 GOTO 0
@REM string1和string2都为字符的数据,英文内字符的大小写将看作不同
@REM 格式如下:
@REM IF [NOT] {STRING1}=={STRING2} Command
@REM IF [NOT] [STRING1]==[STRING2] Command
@REM IF [NOT] "STRING1"=="STRING2" Command
::IF "String"=="string" ECHO ==
::IF NOT "String"=="string" ECHO !=
::SET val1=1
::SET val2=1
::IF %val1%==%val2% ECHO ==
::IF {%val1%}=={%val2%} ECHO ==
::IF [%val1%]==[%val2%] ECHO ==
@REM IF [NOT] EXIST filename command
::SET FileName=autostart.bat
@REM 注意:路径中的空格,命令不识别
::SET FileName=D:\Program File
::IF EXIST %FileName% ECHO %FileName% is Exist
::IF EXIST %FileName% ECHO %FileName% is Exist
::IF NOT EXIST %FileName% ECHO %FileName% is NOT Exist
@REM 16,setlocal and 变量延迟
@REM 问题引入
@REM 批处理运行机制:按行读取(for命令后),先赋值后执行
::SET val=10
::SET val=50 & ECHO %val%
@REM 结果为:10
@REM 使用变量延迟setlocal enabledelayedexpansion + !val!
::setlocal enabledelayedexpansion
::SET val=10
::SET val=50 & ECHO !val!
@REM 结果为:50
@REM for语句
::setlocal enabledelayedexpansion
::FOR /L %%i IN (1,1,5) do (
::SET val=%%i
::ECHO !val!
::)
@REM 提示在没有开启变量延迟的情况下
@REM ::变量值交换
::SET val1=123
::SET val2=abc
::ECHO before: val1=%val1% val2=%val2%
::SET val1=%val2% & SET val2=%val1%
::ECHO after: val1=%val1%val2=%val2%
@REM 17,ATTRIB
@REM 显示或变更文件属性
@REM ATTRIB [+R|-R][+A|-A][+S|-S][+H-H][drive:][path]filename[/S[/D]]
@REM + set
@REM - clear
@REM R only read
@REM A normal file
@REM S system file
@REM A hide file
@REM /S 处理当前文件夹及其子文件夹中匹配文件
@REM /D 处理文件夹
::md dirfile
::attrib +a +s +h dirfile
@REM 新建文件夹设置为存档,系统,隐藏属性
echo.
@rem exit 退出文件
@goto exit
@rem 被调用子程序
:loop
@echo Child Command:
@echo function Lable:%0
@echo arg is:%1 %2 %3 %4 %5
@rem 结束字符 goto:eof
goto:eof
@rem 返回值判断
:0
@echo success!!!
@goto exit
:1
@echo fail!!!
@goto exit
:exit
@rem 更改pause提示信息
@Echo any key to exit... &pause>nul
@exit