15.6.Bat脚本编写
Windows 10 BAT(批处理)脚本编写是一种用于自动化任务的命令行脚本方式。通过编写BAT脚本,你可以批量执行系统命令、文件操作、程序启动等任务。BAT脚本是一种基于Windows命令行解释器(CMD)的脚本文件,通常具有.bat扩展名。
15.6.1.基础概念
批处理文件(BAT):是一种文本文件,可以包含一系列命令,通常用于自动化任务。
命令提示符(CMD):Windows的命令行工具,执行批处理文件时,CMD会逐行解析文件中的命令。
15.6.2.基础语法
命令:每行可以包含一个命令,如 dir、echo、cd 等。
注释:使用 REM 或 :: 来写注释。
|-----------------------|
| REM 这是一个注释 :: 这是另一种注释 |
执行命令:直接输入命令行内容,例如 echo Hello World,显示文本 "Hello World"。
15.6.3.常见命令
1)文件操作命令:
copy:复制文件
del:删除文件
move:移动文件
xcopy:复制文件夹及其内容
mkdir:创建目录
rmdir:删除目录
2)系统命令:
echo:打印输出到命令行
cls:清屏
pause:暂停批处理,等待用户按键继续
exit:退出批处理脚本
3)条件判断:
if:条件判断
else:条件不成立时执行的命令
4)循环控制:
for:循环操作,适用于遍历文件或变量
15.6.4.变量
环境变量:通过 %VARIABLE_NAME% 来引用系统环境变量,例如 %PATH%、%USERPROFILE%。
自定义变量:通过 set 命令创建变量。例如:
|------------------------------|
| set myVar=Hello echo %myVar% |
用户输入:使用 set /p 命令获取用户输入。
|--------------------------------------|
| set /p name=请输入你的名字: echo 你好,%name%! |
15.6.5.流程控制
条件判断:
|-------------------------------------------------------|
| if exist "file.txt" ( echo 文件存在 ) else ( echo 文件不存在 ) |
循环结构:
|-------------------------------------|
| for %%i in (*.txt) do ( echo %%i ) |
这个例子会循环打印当前目录下所有 .txt 文件的文件名。
15.6.6.错误处理
使用 if errorlevel 来检查上一命令的返回值。
|---------------------------------------|
| command if errorlevel 1 ( echo 错误发生 ) |
15.6.7.常用控制命令
goto:跳转到指定标签位置。
|-------------------------------|
| goto :label :label echo 跳转成功! |
call:调用其他批处理文件或脚本。
|-----------------------|
| call other_script.bat |
start:启动一个新的命令行窗口运行命令。
|-------------------|
| start notepad.exe |
timeout:暂停脚本运行一段时间。
|---------------|
| timeout /t 10 |
exit /b:退出当前脚本或子程序。
|---------|
| exit /b |
15.6.8.文件与目录操作
文件复制:
|---------------------------------|
| copy source.txt destination.txt |
文件删除:
|--------------|
| del file.txt |
目录创建:
|------------------|
| mkdir new_folder |
查找文件:
|------------------|
| dir /s /b *.txt |
15.6.9.批处理脚本调试
开启命令回显:使用 echo on 开启回显,查看命令执行情况。默认是 echo off,即不显示命令。
调试模式:使用 @echo off 来避免显示命令,仅显示输出结果。
15.6.10.高级技巧
管道与重定向:
>:输出重定向
>>:追加输出
<:输入重定向
|:管道符,将一个命令的输出作为另一个命令的输入
|----------------------|
| dir > file_list.txt |
批处理函数:利用 call 和标签(label)定义类似函数的结构。
|------------------------------|
| :hello echo 你好,世界! goto :eof |
15.6.11.常见问题与优化
1)批处理执行顺序:命令按顺序逐行执行,异步执行可以使用****start 命令。
2)性能问题:避免不必要的循环和重复执行命令;尽量减少外部程序的调用。
3)安全问题:避免批处理脚本中包含敏感信息(如密码),并确保脚本路径和文件名的安全。
15.6.12.示例
下面是一个包含所有基本内容的示例BAT脚本。这个脚本演示了如何使用变量、文件操作、条件判断、循环、用户输入、错误处理以及其他常见命令。
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| @echo off REM 这是一个示例BAT脚本,演示了基本的批处理语法和功能。 :: 设置环境变量 set myVar=Hello, World! set /p userName=请输入你的名字: :: 打印问候信息 echo %myVar%, %userName%! :: 创建目录并检查目录是否存在 set dirName=test_folder if exist %dirName% ( echo 目录 %dirName% 已经存在。 ) else ( echo 创建目录 %dirName%... mkdir %dirName% ) :: 文件操作:复制、删除文件 echo 创建文件 hello.txt... echo %userName% 的问候 > hello.txt echo 文件 hello.txt 已创建,准备复制... copy hello.txt %dirName%\hello_copy.txt echo 文件复制完成。 :: 使用for循环遍历目录中的文件 echo 当前目录中的文件列表: for %%f in (*.*) do ( echo %%f ) :: 错误处理:检查文件是否存在 if exist hello.txt ( echo hello.txt 文件存在。 ) else ( echo 错误:hello.txt 文件不存在! ) :: 等待用户输入继续 pause :: 跳转到标签并执行 goto :start_script :start_script echo 脚本开始执行! :: 使用timeout暂停5秒 timeout /t 5 :: 启动记事本 echo 启动记事本... start notepad.exe :: 删除文件和目录 echo 删除创建的文件和目录... del hello.txt del %dirName%\hello_copy.txt rmdir /s /q %dirName% :: 程序结束 echo 脚本执行完毕,退出。 exit /b |
15.6.13.常见使用
参考:[附录E 常见Bat使用案例](#附录E 常见Bat使用案例)