Windows脚本:BAT脚本看这一篇就够了
Windows脚本:BAT脚本看这一篇就够了
在Windows系统中,批处理脚本(Batch Script)是一种强大而简单的自动化工具。通过将多个命令组织成脚本文件,可以帮助我们完成重复性任务、批量操作、系统配置等,极大提高工作效率。本文将从基础知识到实战应用,全面介绍BAT脚本的使用方法,帮助读者快速掌握这一实用技能。
一、Windows脚本基本知识
1、了解扩展名
Windows脚本扩展名其实有两个:.bat和.cmd。它们在大部分情况下可以互换使用,但也有一些细微的差异。基本语法是相同的,因此,只要会.dat脚本,基本就会.cmd脚本。这里简单描述一下不同点:
对比项 | .bat | .cmd |
---|---|---|
适用范围 | 兼容早期 DOS 和 Windows 系统 | 专用于 Windows NT 系列系统(如 Windows 2000 及更高) |
变量处理 | 在某些情况下与 DOS 兼容,变量处理可能有不一致 | 仅适用于 Windows NT 环境,变量处理更标准化 |
命令解析优先级 | 在某些旧系统中可能存在兼容性问题 | 在 NT 系列系统中,.cmd优先于.bat执行 |
历史背景 | DOS 和早期 Windows 系统的默认批处理文件扩展名 | Windows NT 系列引入的扩展名,增强兼容性 |
兼容性 | 支持旧的 DOS 命令,如CALL | 专为 NT 命令集设计,支持更现代化的语法 |
另外,PowerShell也是Windows脚本。它是CMD的扩展,更强大的存在,跨平台,能够兼容CMD所有指令,只是语法(如for)是不兼容的,但是语法更简洁,而且还兼容Linux指令。因此,BAT语法还是需要单独学习的,后面转PowerShell也不难,后续还会单独讲PowerShell。
2、脚本的编程方式
脚本的使用方式一般是在Windows上进行的,创建一个txt文件,更改后缀为bat,通过txt打开并编程,保存后双击文件运行即可。
有一些好用的第三方工具,可以编辑脚本后直接运行,如Notepad++ 、BatchCompiler等,喜欢用哪个就用哪个,重要的是玩起来。
3、CMD指令不区分大小写
CMD指令不区分大小写,这样输入是等价的:CMD == Cmd ==CMD == CmD。
4、空格不能乱加
在批处理(.bat)脚本中,空格的使用是有特定规则的,不能随意添加,如变量赋值。
二、BAT脚本语法基础
官方文档:CMD | Microsoft Learn
1、注释
:: 这是一个注释
REM 这也是一个注释
2、变量赋值与取值
set a=John
echo %a%
3、输入、输出与暂停
pause命令用于暂停批处理文件的执行,并提示用户按任意键继续。
set /P a=
echo %a%
pause
4、关闭命令回显
即@echo off 的效果,用于关闭命令回显功能。
@echo off
set /P a=
echo %a%
pause
5、清屏
即cls的效果,将该指令之前的打印信息清空。
@echo off
set /P a=
cls
echo %a%
pause
6、条件语句
简单的if语句,如:if "%a%"=="John" echo Hi, John!
@echo off
set /P a=
cls
echo %a%
if "%a%"=="John" echo Hi, John!
pause
7、循环语句
@echo off
for %%i in (1 2 3) do echo %%i
pause
8、重定向
覆盖:>;追加:>>。
@echo off
echo Hello > C:\Users\yeqin\Desktop\test\output.txt
dir >> C:\Users\yeqin\Desktop\test\output.txt
pause
9、切换路径与当前路径
cd可以切换路径,但是不能直接切换到其他盘符路径。准确的说,cd 也能切换盘符,需要加上 /d 选项。
cd ..
echo %cd%
10、切换盘符
直接输入盘符标识。
C:
11、错误处理
检查上一个命令的执行状态,通过%ERRORLEVEL%判断。invalid_command是一个不存在的指令,因此会触发错误,%ERRORLEVEL%的值会变成非零(通常为 1)。
invalid_command
if %ERRORLEVEL%==0 echo Success
if %ERRORLEVEL% neq 0 echo Error occurred
12、一行中编写多条指令
&将多条命令串联在一起,无论前一条命令是否成功,都会执行下一条命令。
echo Hello & echo World
&&:前一条命令成功(返回值为0)时,执行后一条命令。
dir && echo Directory listed successfully
|将前一条命令的输出作为下一条命令的输入。
dir | find "test"
||:前一条命令失败(返回值非0)时,执行后一条命令。
dir nonexistent_folder || echo Failed to list directory
13、函数与标签
BAT没有函数概念,只有标签概念,只能简单使用类似函数的部分功能。
@echo off
:: 主程序
echo Starting the script...
:: 调用add函数,传递两个参数
call :add 5 10
echo The sum is %RESULT%
:: 调用greet函数,传递一个参数
call :greet John
pause
goto :EOF
:: 函数add
:add
:: 第一个参数为%1,第二个参数为%2
set /a RESULT=%1+%2
goto :EOF
:: 函数greet
:greet
:: 输出传递的第一个参数
echo Hello, %1!
goto :EOF
14、模块化与call
仅支持运行BAT文件,不支持调用其他文件中的标签。
@echo off
call C:\Users\yeqin\Desktop\other.bat
pause