DOS:Disk Operating System 是早期微软的操作系统命令行界面,用于控制计算机执行任务命令,是在系统启动时加载的操作系统。Windows是在DOS基础上发展而来的,引入了更多图形化界面和功能,但同时DOS命令仍然在windows得以支持。
.bat或者.cmd为结尾的文件,即DOS批处理脚本文件。运行在windows命令行环境。将一系DOS列命令按一定顺序集合。
在命令行直接输入help可以查看DOS本身支持的命令,如果用help command可以获得command命令的详细帮助;
以下只讲解基础用法,很多命令存在复杂的扩展指令用法,可以用help command详细查看
新增&&改写变量 SET [variable=[string]]
显示当前全部变量SET(不带参数)
使用变量%variable%,如打印当前时间echo %DATE%
set testVar=hahaha
echo %testVar%
:: 输出hahaha
echo %DATE%
:: 输出如2023/11/13 周一
常用变量如 DATE日期,TIME时间,CD当前目录,ERRORLEVEL函数返回值
IF [NOT] 表达式 number command [ELSE command]
常用表达式举例:
1)ERRORLEVEL number // 最后运行的程序返回值 等于或者大于指定number
2)EXIST filename // 指定文件存在
3)条件比较表达式 string1 cmp-op string2,
—cmp-op可选:EQU等于 NEQ不等 LSS小于 LEQ小于等于 GTR大于 GEQ大于等于
set aVar=123
set bVar=124
if %aVar% LSS %bVar% (
echo %aVar% less than %bVar%
) else (
echo %aVar% bigger nor equal to %bVar%
)
:: 输出123 less than 124
FOR %variable IN (set) DO command [command-parameters]
注意:在批处理命令中使用for命令 注意变量请使用%%variable,并区分大小写;
for %%i in (1 2 3 4 5) do echo %%i
:: 输出 1(换行) 2(换行) 3 (换行)4 (换行)5(换行)
for存在大量扩展用法,详见help for
包括/L迭代器控制(指定起始 步长 结束),/D目录匹配(非递归子目录),/R 目录文件匹配(递归), /F 读取文件内容逐行操作匹配
有两种注释方式:1)行首加 ::,本行将被注释并且内容不会回显;2)行首加REM,本行将被注释,并且内容执行会回显示出来。
:: 这是一样注释,执行脚本时,不被打印出来。
REM this is a comand no use line, it will print to command windows
ECHO [message] // 输出字符串
ECHO [ON | OFF] // 打开或关闭回显(脚本执行默认命令回显是打开,即每条指令执行前都会显示到命令行界面 )
PAUSE // 暂停批处理执行程序,并在屏幕上显示 请按任意键继续. . .
GOTO label // 跳转命令,批处理文件中 可以用:xxx 来创建一个标签,然后用goto跳转过去;
goto end
:end
echo this is the end
:: 输出this is the end
EXIT [/B] [exitCode] // 退出此bat文件,返回exitCode,默认关闭DOS窗口,如果带了/B就不关闭窗口
CALL [drive:][path]filename [batch-parameters] // 在本窗口调用新批处理文件处理,带入参数batch-parameters
START [drive:][path]filename [batch-parameters] // 创建一个新窗口处理
DATE /t // 显示当前日期,直接输入DATE是进行日期设置
TIME /t // 显示当前时间
DOS命令中没有类似shell的sleep命令,可以用ping命令实现类似sleep的效果(如下 ping默认每秒一个数据包,6个数据包就是5秒)
ping -n 6 127.0.0.1 >nul
doskey /history 可以直接查看历史命令;
where 命令/文件 // 在PATH或者当前目录查找
多个命令组合:
cmd1 & cmd2 [& cmd3 … ] // 顺序执行各条命令
cmd1 && cmd2 [&& cmd3 … ] // 顺序执行各条命令,如果前一个命令失败,后续命令不执行
cmd1 || cmd2 [ || cmd3 … ] // 顺序执行各条命令,如果前一个命令失败,才执行后续命令
管道命令:
cmd1 | cmd2 [ | cmd3 … ] // 前一条命令的输出结果 作为下一条命令输入参数,与shell命令类似
DOS中没有shell中类似touch命令串口文件,可以利用type和重定向>创建一个新空文件。
type nul >./tmp.txt
:: type命令显示nul(特殊设备 用于丢弃输入输出)导入到创建的tmp.txt中。
DEL [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names // 删除文件
MOVE [/Y | /-Y] [drive:][path]filename1[,…] destination // 移动文件
REN [drive:][path]filename1 filename2 // 重命名
COPY source destination // 复制文件
DIR [drive:][path][filename] // 查看文件
CACLS filename // 修改权限等
TYPE [drive:][path]filename // 显示文本内容
输出重定向> (若文件不存在就创建一个)
追加内容 >> (内容补充到文件末尾)
输入重定向< ,从文件中读取命令作为参数输入给命令
将一个句柄输出写入到另一个句柄输入中 >&
将一个句柄输入读取到另一个句柄输出 <&
MD [drive:][path] // 建立文件夹
RD [drive:][path] // 删除文件夹
CD [drive:][path] // 切换当前目录到制定文件夹
TREE [drive:][path] [/F] [/A] // 输入子目录
对于特殊符号<、>、&,可以前面添加^来把它们作为普通符号使用
FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] “string” [[drive:][path]filename[ …]] // 在文件中搜索字符串string
字符替换:%PATH:str1=str2%,将PATH变量中str1替换为str2.
字符截取:%VAR:~[m [, n] ] %,截取VAR指定偏移内容,m为起始偏移 缺省为0,n为长度 缺省为偏移开始的全部内容长度;