【OS_Windows】bat编程基础
1. 变量的定义与使用
1.1. 定义变量
一般通过set关键字来定义变量并赋值,通常变量值不需要加引号。
1 | set name=John Doe |
如果加了引号会使变量值带有引号,使用时需要用%变量来去除引号。例如set var=”value”会让变量值包含引号,这时候引用时可能需要用%var来去除。
1.2. 引用变量
1.2.1. 变量引用时是否要加引号
变量的值如果包含空格、特殊字符(如&、|、>、<、^)时,引用变量要加引号。
1 | set file_path=C:\My Documents\test.txt |
在条件判断语句中(如 if、exist)涉及文件/目录存在性检查、字符串比较时,路径或字符串变量必须加引号,避免空格干扰判断。
1 | set target=C:\Program Files\app.exe |
1.2.2. 变量的延迟扩展机制
批处理脚本在执行时默认会率先将所有的变量引用解析成值,但if、for代码块中定义的变量是在执行时才赋值的,因此引用代码快中定义的变量时会出现空值的问题。
要启用「延迟扩展setlocal enabledelayedexpansion」并通过!号代替%号来引用变量解决即时扩展带来的问题。
1.未启用延迟扩展导致变量引用为空
1 | @echo off |
2.启用延迟扩展
1 | @echo off |
2. 输入输出
2.1. 输入
2.1.1. 基础输入:set /p
set /p用于提示用户输入,并将输入内容保存到变量中。
语法:set /p 变量名=提示信息
示例:
1 | @echo off |
2.1.2. 限制选项输入:choice
choice用于让用户从有限选项中选择(需Windows XP及以上系统支持)。
语法:choice /c 选项列表 /n /m 提示信息
示例:
1 | @echo off |
参数说明:
/c YN:选项为 Y和 N(用户输入Y或N);
/n:不显示选项列表(否则会显示 [Y,N]?);
/m:自定义提示信息;
errorlevel:返回选择的索引(从1开始,选第一个选项返回1,第二个返回2,依此类推)。
2.2. 输出
通过 echo、print(不推荐)等命令向屏幕输出内容,支持文本、变量值、特殊符号等。
2.2.1. 基础输出:echo命令
echo用于输出文本或变量值,是最常用的输出命令
l 输出固定文本
1 | echo Hello World :: 输出:Hello World |
l 输出变量值
1 | set name=Alice |
l 关闭/开启回显
1 | @echo off关闭脚本自身的命令回显(默认会显示执行的命令); |
2.2.2. **输出重定向(保存到文件)**
l 通过 >(覆盖)或 >>(追加)将输出保存到文件
覆盖写入时文件不存在则创建,存在则清空
1 | echo Hello > output.txt :: 文件内容:Hello(无换行) |
l 带换行输出
用 echo.或 echo后加换行符:
1 | echo Hello > output.txt |
l 将命令的执行结果输出到文件
1 | dir C:\ >> dir_list.txt :: 将C盘目录列表追加到dir_list.txt |
- 读取多行输入(高级)
若需读取用户输入的多行内容(如一段文本),可通过循环结合 set /p实现:
1 | @ echo off |
2.3. 读写文件
批处理可通过重定向、for /f循环等方式读取文件内容,或向文件写入数据。
2.3.1. 读取文件内容到变量
l 读取单行:用 set /p从文件中读取一行:
1 | @echo off |
l **读取所有行(循环处理):**用 for /f逐行读取文件:
1 | @echo off |
2.3.2. 写入内容到文件
l **覆盖写入:**用 >或 echo命令:
1 | echo 第一行内容 > C:\output.txt |
l 写入多行内容:用 for循环或文本块重定向(需结合 echo和换行符)
1 | ( |
总结批处理的输入输出核心操作:
输入:set /p获取用户输入,choice选择选项;
输出:echo文本/变量,>/>>重定向到文件,color设置颜色;
文件I/O:set /p <文件读单行,for /f循环读多行,>/>>写文件。