扫码加入

  • 正文
  • 相关推荐
申请入驻 产业图谱

Windows脚本:bat脚本看这一篇就够了

01/19 13:56
7595
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

前言

在日常操作中,BAT脚本(Batch Script)是 Windows 系统中一种强大而简单的自动化工具。它通过将多个命令组织成脚本文件,帮助我们完成重复性任务、批量操作、系统配置等,极大提高效率。如果你对 BAT 脚本一知半解,或想快速掌握其精髓,这篇介绍就是为你准备的!

一、Windows脚本基本知识

1、了解扩展名

Windows脚本扩展名其实有两个:dat和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=Johnecho %a%

3、输入、输出与暂停

pause命令用于暂停批处理文件的执行,并提示用户按任意键继续‌。

set /P a=  echo %a%  pause

4、关闭命令回显

即@echo off 的效果,用于关闭命令回显功能‌。

@echo offset /P a=echo %a%pause

5、清屏

即cls的效果,将该指令之前的打印信息清空。

@echo offset /P a=clsecho %a%pause

6、条件语句

简单的if语句,如:if "%a%"=="John" echo Hi, John!

@echo offset /P a=clsecho %a%if "%a%"=="John" echo Hi, John!pause

7、循环语句

@echo offfor %%i in (1 2 3) do echo %%ipause

8、重定向

覆盖: > ;追加:>> 。

@echo offecho Hello > C:UsersyeqinDesktoptestoutput.txtdir >> C:UsersyeqinDesktoptestoutput.txtpause

9、切换路径与当前路径

cd可以切换路径,但是不能直接切换到其他盘符路径。准确的说,cd 也能切换盘符,需要加上 /d 选项。

cd ..echo %cd%

10、切换盘符

直接输入盘符标识。

C:

11、错误处理

检查上一个命令的执行状态,通过 %ERRORLEVEL% 判断。

invalid_command是一个不存在的指令,因此会触发错误,%ERRORLEVEL% 的值会变成非零(通常为 1)。

invalid_commandif %ERRORLEVEL%==0 echo Successif %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 10echo The sum is %RESULT%:: 调用greet函数,传递一个参数call :greet Johnpausegoto :EOF:: 函数add:add:: 第一个参数为%1,第二个参数为%2set /a RESULT=%1+%2goto :EOF:: 函数greet:greet:: 输出传递的第一个参数echo Hello, %1!goto :EOF

14、模块化与call

仅支持运行bat文件,不支持调用其他文件中的标签。

@echo offcall C:UsersyeqinDesktopother.batpause

三、项目实战

(持续更新中。。。)

相关推荐