没想到还会需要再次写批处理的一天,早先都是需要用时抱抱佛脚,导致现在都忘了差不多,既然这次刚好用到便做个记录,以加深印象。
命令
帮助
- help 命令
- 命令 /?
常用命令
- cd:切换目录
- cd ..:进入上一级目录
- cd \:进入当前盘符的根目录
- cd \d:切换盘符
- md:创建文件夹(md D:\a\b\c 连续创建)
- rd:删除文件夹
- rd /s:包含子文件夹
- rd /q:无需确认
- del:删除文件
- ver:查看系统版本
- set:查看系统变量
- cls:清屏
- dir:显示当前目录文件
- tree:以树型显示目录结构
- type:显示文件内容
- more:逐行显示文件内容
- copy:复制文件
- find:查找文件
- time:显示当前时间
- time /t:不提示输入日期
- date:显示当前日期
- date /t:不提示输入时间
- ping
- ping -l:指定大小
- ping -n:指定次数
操作符
重定向
输入重定向
:: 重新排序文件,结果将显示在命令行中sort < ip.txt
输出重定向
:: > 将输出写入到指定文件(会覆盖原文件,不存在则新建)ipconfig > C:\ip.txt:: >> 将输出添加到指定文件末尾ipconfig >> C:\ip.txt
错误信息重定向
使用重定向隐藏一些命令的输出信息
:: 不显示输出结果ipconfig > nul:: 不显示输出结果同时不提示错误信息ipconfi > nul 2 > nul
管道
管道(piping)可以将前一个命令的输出结果作为下一个命令的输入:
:: 最常用的是 find 和 more:: 以行为单位从输出结果中找到有 10.1 的数据ipconfig | find "10.1"
命令链
:: & 按顺序执行,不管失败与否cd D:\ & dir
:: && 前一命令成功,才执行下一条命令dir D:\ && sort
:: || 前一命令失败,才执行下一条命令cd Z:\ || echo 不存在
可以用 () 把命令分组:
:: 把计算机名和 IP 地址写入到指定文件中(hostname & ipconfig) > info.txt
运算符
- equ:相等
- neq:不相等
- lss:小于
- leq:小于等于
- gtr:大于
- geq:大于等于
脚本
脚本的开始
- 关闭回显
- @:关闭当前行回显;
- echo off:从下一行开始关闭回显;
- 空行
- echo.:输出空白行
- 标题
- title:更改标题栏名称
- 颜色
- color:设置背景颜色
- 注释
- rem:注释(rem 是一条语句)
- :::效果同上
- 暂停
- pause:将显示“按任意键继续…”
:: 关闭所有回显@echo off:: 空行echo.:: 设置标题title 脚本的开始rem 设置颜色color 3f
跳转
:: goto 后面接着要跳转的标签goto startecho.:startecho 标签需要以冒号开头
变量
变量命名:
命名不区分大小写,可以使用字母、数字和符号,一般使用有意义的单词,多个单词使用小驼峰命名法。
变量值:
所有的变量值均以字符串形式存储。
设定变量值
:: 等号两边留有空格,常会失败set var=value
变量的引用:
引用变量(包括内部变量),均使用 %
号包裹:OS%
。
变量的作用域:
在 Shell 中设置的变量适用于当前的实例,如果需要更近一步限定范围,可以使用 setlocal
于 endlocal
语句。
语句
if 语句
- if 语句:条件为真时执行;
- if not 语句:条件为假时执行;
- if…else 语句:条件为真和假时分别执行;
- if defined 语句:指定变量存在,则执行;
- if not defined 语句:指定变量不存在,则执行;
注:可以使用 @ 符号标记嵌套
for 语句
:: 遍历 0 - 10,步进为 2for /l %a in (0, 2, 10) do echo %a
注:
- for 中的变量区分大小写;
- 在命令行交互式使用 for 时,使用的是
%variable
,脚本中则是%%varabile
;
程序返回码
批处理和其他脚本不同,并不能直接用 if 判断是否直接成功或失败,而是需要借助 errorlevel
命令。
:: 当前一个命令运行结束后,便可使用 errorlevel 配合 if 语句进行判断if %errorlevel% == 1 (echo 执行失败)
返回码的错误类型值:
- 1:表示通常的错误(最常见);
- 2:表示执行错误,意味命令没有正确执行;
- -2:表示算术错误;