大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
批处理是Windows自带的一个脚本引擎,语法简洁、内置一些功能强大的命令,并且可以与Windows上的其他软件进行良好的通信。批处理能够提供一系统自动化处理功能,大幅提高日常工作中的一些琐碎重复事情的效率。
1. 概念
- 批处理(Batch),顾名思义即是指批量处理。批处理是基于dos命令行,Windows默认内置解释器cmd.exe的脚本语言。批处理文件默认保存为.bat或.cmd。
- 批处理是基于Dos命令行,所以批处理是没有GUI的,是运行在命令提示符终端(Command Prompt Terminal)上的, Command Prompt Terminal也被称为Dos Console。
- 批处理文件默认的存储格式为ANSI,即使用Windows系统默认的编码格式。
2. 解释器
- 批处理大小写不敏感。
- 批处理解释器默认是读取一行代码,然后解释执行。
- 批处理解释器如果读取到圆括号“(”,则认为直到下一个对应的“)”为结束。此方式可以让批处理解释器一次解释执行多条命令。
- CTRL+C退出当前正在执行的批处理。
3. 语法
3.1. 注释
- 段注释,主要是利用goto来达到段注释的效果,如:
goto start
= 可以是多行文本,可以是命令
= 可以包含重定向符号和其他特殊字符
= 只要不包含 :start 这一行,就都是注释
:start
- 行注释,推荐前面两种方式:
3.2. 基础指令
-
Echo命令,用来输出后面的信息,后面的信息是字符串也可以是变量。
-
回显,显示正在执行的代码内容。
- 批处理代码默认是开启回显的。
- Echo off是关闭此后代码的回显,echo on是开启此后代码的回显。
- @是关闭此行代码的回显。如:@echo “Hello, World!”
- @echo off是关闭此行代码及此后的回显,@echo on是开启此行及此后代码的回显。
-
Pause,暂停指定,暂停批处理解释器继续读解释执行代码。用户按任何键将继续。
-
Cls,清屏命令,清除当前控制台显示的内容。
3.3. 定义变量
- 字符串变量
set variable-name=value
set info=Hello world.
echo %info%
注意:=左右都是字符,如果有空格,空格也属性字符串的一部分。
使用set设置的环境变量只在当前进程及其继承进程有效,并且是临时的,进程关闭重启之后失效。
- 数字变量
set /A variable-name=value
set /A age=18
echo %age%
注意: 可进行加、减、乘、除、取余操作。 它们的符号分别是 + – * / % ,set /a 可计算的数值,
单个数值且最终运算结果只能大于或等于-2的31次方,小于2的31次方“。批处理算术只能针对整数。
set /A num=18
# 注意在文件中%要取转义字符%%,在命令行中不需要
set /A b=%num%%%20
3.4. 字符串
set toolName=MPTool
set ver=1.0.1
set /A verNo=5
rem 取消字符串变量
set ver=
rem 判断字符串变量是否取消
if [%ver%]==[] echo "String ver is empty"
rem 字符串连接
set mpVer=%toolName% %ver% %verNo%
rem 字符串转整型
set val=12345
set /A numeric=%val%
rem 替换字符串
set text=Make America great again
echo %text:America=China%
rem 截取字符串
set info=abcdefghijklmnopqrstuvwxyz0123456789
echo 截取前5个字符:
echo %info:~0,5%
echo 截取最后5个字符:
echo %info:~-5%
echo 截取第一个到倒数第6个字符:
echo %info:~0,-5%
echo 从第4个字符开始,截取5个字符:
echo %info:~3,5%
echo 从倒数第14个字符开始,截取5个字符:
echo %info:~-14,5%
3.5. 数组
批处理并不支持真正的数组,以下操作只是模拟数组、列表。
- 定义数组
set a[0]=3
set a[1]=5
set a[2]=7
- 单个访问数组
echo %a[0]% %a[1]% %a[2]%
- 遍历访问
setlocal enabledelayedexpansion
for /l %%n in (0,1,2) do (
echo ![%%n]! )
- 定义列表
set list = 1 3 5 7 9
- 遍历访问
for %%a in (%list%) do (
echo %%a )
3.6. 条件判断
- 语法
if condition (do some stuff)
if condition (do some stuff) else (do other stuff) - 示例
set name=tom
if %name%==tom (echo yes)
set age=21
if %age%==20 (echo yes) else (echo No)
REM 圆括号内的内容可以换行
- 其他判断符号
EQU – 等于
NEQ – 不等于
LSS – 小于
LEQ – 小于或等于
GTR – 大于
GEQ – 大于或等于 - 是否定义
if defined name (echo Yes) else (echo No)
- 文件是否存在
if exist C:\set2.txt echo "File exists"
if exist C:\set3.txt (echo "File exists") else (echo "File does not exist")
3.7. 循环
For中的变量在文件本时,需要使用转义字符%,在控制台时不需要。
- 遍历字符串
- 遍历文件及目录
- 遍历文本内容
- 循环
- 变量延迟
for语句只执行后面的一句代码,如果想写多句代码,必须用()。批处理解释代码时,是先读出当前行的代码并解析,for及之后的代码也是一次加载并解释的。这就导致for之后的代码中的变量设置了并没有立即生效。如果想要立即生效,需要启用变量延迟。- setlocal enabledelayedexpansion启用延迟的环境变量扩展,直到出现匹配的endlocal 命令,无论 setlocal 命令之前的设置如何。
- setlocal disabledelayedexpansion禁用延迟的环境变量扩展,直到出现匹配的 endlocal 命令,无论 setlocal 命令之前的设置如何。
- 示例,求0到100之和。
3.8. 输入输出
- STDIN
标准输入,默认为键盘输入,标号为0。在批处理中STDIN被处理成CON。
Rem 以下语句将键盘输入输出到info.txt文件夹。
Copy con info.txt
REM 和上面语句等价,按CTRL+C结束输入
Type con>info.txt
- STDOUT
标准输出,默认输出到命令提示符窗口,标号为1。
在批处理中默认的输出即为STDOUT,可以省略。
Rem 以下两句等价,将IP信息从STDOUT转到文件info.txt中。
Ipconfig >info.txt
Ipconfig 1>info.txt
- STDERR
标准错误输出,默认输出到命令提示符窗口,标号为2。
rem 以下命令只能将net的标准输出记录在result.log文件中,出错信息则会输入到控制台
net stop myservices >result.log
rem 如果想把错误信息输出到文件
net stop myservices 2>result.log
rem 如果想把正确和错误信息都输出到文件,则需要用重定向即将2重定向到1,这样两者都输出到文件
net stop myservices 1>>result.log 2>&1
- nul
很多命令执行都会输出一些信息,如pause命令。但是如果我不想显示输出的信息,可以将输入信息输出定向到nul,即相当于不用输出。
- set /p
- 获取用户输入
- 不换行输出
- 获取用户输入
3.9. goto和标签
Rem goto表示跳转到指定标签的位置
Goto XX
Rem XX标签标记位置
:XX
- 用goto模拟while
:While
If %name% NEQ tom (
Rem do some stuff
Goto while
)
- 用goto模拟函数
:Begin
Set /p a=please enter:
If %a%==2 Goto funcA
If %a%==3 Goto FuncB
Exit
:FuncA
Rem do some stuff
Goto Begin:
:FuncB
Rem do some stuff
Goto Begin:
3.10. Call子程序
- 调用子代码
CALL :label arguments
:label rem do so stuff
- 调用批处理
call f:\test.bat 1 3
- 获取参数
call调用子程序可以带参数,参数默认以%0、%1来获取,参数可以进行扩展。
3.11. 文件读写
- 创建新文件并写入
- 追加到原文件写入
- 读文件
3.12. 组合命令及管道
- &
Usage:第一条命令 & 第二条命令 [& 第三条命令…]
用这种方法可以同时执行多条命令,而不管命令是否执行成功 - &&
Usage:第一条命令 && 第二条命令 [&& 第三条命令…]
用这种方法可以同时执行多条命令,当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则一直执行完所有命令; - ||
Usage:第一条命令 || 第二条命令 [|| 第三条命令…]
用这种方法可以同时执行多条命令,当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的命令则一直执行完所有命令; - |
Usage:第一条命令 | 第二条命令 [| 第三条命令…]
将第一条命令的结果作为第二条命令的参数来使用,记得在unix中这种方式很常见。 - >,>>
将一条命令或某个程序输出结果的重定向到特定文件中, > 与 >>的区别在于,>会清除调原有文件中的内
容后写入指定文件,而>>只会追加内容到指定文件中,而不会改动其中的内容。 - < , >& , <&
< 从文件中而不是从键盘中读入命令输入。
>& 将一个句柄的输出写入到另一个句柄的输入中。
<& 从一个句柄读取输入并将其写入到另一个句柄输出中。
3.13. 转义字符
批处理中有很多特殊的符号有特殊的用途,但是当我们想将这些特殊的符号当作原始的字符来用时,就需要特殊的处理,此时就需要转义字符^来标识。
- 普通字符串
:: 此时就需要转义,否则批处理执行错误
Echo you ^& me
- 命令字符串
:: dir /ad /b /s “%~dp0”^|sort /r是命令字符串,所以|前必须加^转义为字符串
for /f “delims=” %%a in (‘dir /ad /b /s "%~dp0"^|sort /r') do (
rd "%%a">nul 2>nul)
3.14. 退出及退出码
- 批处理退出exit
EXIT [/B] [exitCode]
REM 退出当前cmd.exe,退出码为1.
Exit /B 1 - 批处理退出goto :EOF
Goto :EOF退出到上一个调用,上一个调用可以是另外一个批处理中的call命令,也可以是当前批处理中的Call命令。 - Windows中每一个进程退出都有退出码。
Win32中有API,exit(exitCode)设置当前进程的退出码。
Python中也能够通过os.exit(exitCode)来设置退出码。
批处理中直接调用exe时,是阻塞的方式,等待exe结束之后,通过变量%errorlevel%获取。
3.15. 内置命令简介
- Cd设置当前目录
- Md创建文件夹
- Rd删除文件夹
- Ren重命名文件
- Copy拷贝文件
- Del删除文件
- Dir显示目录
- Move移动文件
- ASSOC指定或修改文件类型
- FTYPE显示修改文件关系类型
- Date/time显示当前日期和时间
- Attrib设置显示文件属性
- Choice选择判断
- Mode设置窗口
- Color设置窗口字体背景颜色
- title设置控制标题
3.16. 扩展模块简介
批处理的很多功能都通过扩展组件完成的,Windows的组件基本都提供了命令行操作。
- Find/findstr查找文本内容,支持正则表达式。
- Forfiles遍历文本内容,forfiles只支持ANSI格式的文本。
- Ipconfig获取IP相关的
- WMIC调用WMIC组件获取设备信息
- Devcon控制设备安装驱动等
- Xcopy拷贝文件扩展功能
- Format/diskpart格式化分区有关功能
- Schtasks定时计划功能
- Netstat配置网络IP协议等
- REG操作注册表
- Explorer打开文件夹
- Ping网络通信
- Shutdown关机命令
- Regsvr32注册反注册组件
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/171947.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...