<电子幽灵>开发笔记:BAT基础笔记(一)
BAT脚本基础笔记(一)
介绍
费曼学习法最重要的部分,即把知识教给一个完全不懂的孩子——或者小白。
为了更好的自我学习,也为了让第一次接触某个知识范畴的同学快速入门,我会把我的学习笔记整理成电子幽灵系列。
提示:作为低代码工具的笔记,这里会用特殊字体表示要用到的函数等等。请若要学习,请结合相关工具边用边学。
BAT基础笔记(一)
- BAT脚本基础笔记(一)
- 介绍
- 简介
- 在哪里编写BAT代码?
- BAT基本语法
- 1. 基本命令结构
- 2. 注释
- 3. 变量
- 变量定义
- 变量调用
- 变量运算
- 字符串
- 字符串替换
- 数学运算
- 4. 常用基本命令--基本文件操作
- 5. 打印、输入、输出命令:echo
- 7. 条件语句
- if 语句
- 比较运算符
- 三元运算符: `&&` 和 `||`
- 8. 循环
- for 循环
- while 循环
- 9. 脚本执行
- 总结
本篇笔记通过对各种资料学习总结得到。
简介
BAT脚本是主要用于Windows操作系统中的一种批处理脚本。所谓"批处理",就是一次性处理一批指令。这些命令通常是可以在命令提示符(cmd)中手动输入的,但通过将它们编写成一个脚本文件,可以实现自动化操作,大大提高工作效率。BAT脚本文件的扩展名为 .bat,用户可以通过双击这个文件来运行其中的所有命令。
BAT脚本可以用来管理文件和文件夹、运行其他程序、网络配置等任务。它支持变量、条件判断、循环等功能,使得脚本编写更加灵活和强大。然而,BAT脚本也有其局限性,比如错误处理能力较差,编写复杂的脚本时可能会比较困难。
需要注意的是,虽然BAT脚本在自动化任务方面很有用,但由于其执行的命令可能具有很高的权限,因此编写和使用BAT脚本时需要谨慎,避免执行到恶意代码或命令,造成不必要的损失。
在哪里编写BAT代码?
编写BAT脚本主要是在Windows操作系统中进行的。编写BAT脚本有很多种方法,这里不妨列出一些:
-
记事本 :Windows自带的记事本可以用来编写和保存BAT脚本文件。编写完成后,只需将文件保存为
.bat格式即可。这种方式简单直接,很多新手在第一次接触BAT脚本时就是使用这种方式编写简单的BAT脚本代码。但是简单直接有时意味着简陋。每次编写,都需要转换文件格式,并(有时会)处理一些繁琐的报错。而且你无法得知自己写出的脚本是否存在某些问题,会带来不必要的风险。大批量的脚本编写不应当直接使用记事本。
-
Notepad++ :这是一个更强大的文本编辑器,支持多种编程语言的语法高亮和代码折叠等功能,可以更方便地编写BAT脚本。Notepad++是一个免费的开源软件,可以在其官方网站下载。
-
Visual Studio Code :VSCode里面当然有支持BAT编写的插件啦。在VSCode里面,就可以无视
.bat格式,直接撰写脚本。bat-snippets插件可以帮助你快速插入常用的BAT代码片段,Bash Debug插件可以帮助你调试BAT脚本。其他的AI代码补全也可以帮你写作。 -
PowerShell ISE :如果你打算编写更复杂的脚本,PowerShell可能是一个更合适的选择。PowerShell ISE(集成脚本环境)是Windows自带的脚本编辑器,专门为PowerShell脚本设计,支持语法高亮、调试等功能。
-
Bat To Exe Converter :这个工具可以帮助你将BAT脚本转换为可执行文件(.exe)。它是一个免费的软件,可以将BAT脚本转换为标准的可执行文件,并且提供了一些附加选项,如隐藏源代码、设置图标等。
我使用的是VSCode编写。一是平时写代码就用VSCode,二是VSCode插件很多,几乎一体化,也可以帮助我写BAT脚本。
BAT基本语法
按编译和解释分类,现代的编程语言可以分为编译性语言和解释性语言。编译型语言需要编译器翻译成二进制机器码然后才能运行,而解释型语言由解释器逐行解释执行,不需要预编译。BAT就是一种解释型脚本语言,这一点它与Python十分相似。
1. 基本命令结构
.bat 文件中的命令结构与直接在命令提示符中输入的命令类似:
command [options] [arguments]
- command:要执行的命令。
- options:可选参数,通常以 / 开头。
- arguments:传递给命令的参数。
2. 注释
BAT只支持逐行注释。共有两种 ::和 rem
:: 这行代码被注释掉了,它不会被终端回显
rem 这行代码也被注释掉了,但是如果打开了回显,他会显示在命令行终端上
3. 变量
变量定义
变量定义时不需要声明类型,直接赋值即可:
set MY_VAR=Hello, World!
注意事项: 在给变量赋值时,变量名和等号间绝对不可以有空格,这样会导致赋值失败;因此,变量名里也绝不可以有 =。
变量调用
使用 % 符号引用变量:
echo %MY_VAR%
echo %PATH%::是的,环境变量也可以使用相同的引用方式
变量运算
字符串
- 字符串拼接
当给一个变量赋值为字符串时,我们并不需要把字符串两侧都加上引号。
set GREETING=Hello
set NAME=World
echo %GREETING%, %NAME%!
set Unint=%GREETING% %NAME%
echo %Unint%
在上面的例子当中,两次echo输出的结果是相同的。
字符串替换
- set命令替换
用set命令进行字符串替换的格式如下:%变量名:待替换字符=替换后字符%
如果替换后字符为空(即等号后直接跟 %),则可以删除子字符串。
如果待替换字符有多个,会全部替换。
例子:
set var=Hello, World!
set var=%var:World=Universe%
echo %var%
输出:
Hello, Universe!
数学运算
批处理脚本本身不直接支持复杂的数学运算(如浮点数运算),但可以通过一些方法进行基本的整数运算。
-
使用
set /a进行算术运算set a=123 set b=456 set c=%a%+%b% echo %c% set /a c=a+b echo %c%输出:
123+456::变量默认以字符串的形式储存,当没有额外参数时,变量之间的运算默认采取字符串方式运算。 579 -
支持的运算符
+:加法-:减法*:乘法/:除法(整数除法)%:取模(余数)&:按位与|:按位或^:按位异或!:按位非<<:左移>>:右移
-
示例
以下是一些使用 set /a 进行整数运算的示例:
set /a a=123+456set /a b=123-456set /a c=123*456set /a d=123/45set /a e=123%45echo %a%echo %b%echo %c%echo %d%echo %e%
输出:
5793356088233
注意事项:
set /a只能进行整数运算。- 浮点数运算在批处理脚本中不直接支持,但可以通过调用外部工具(如
calc.exe或powershell)来实现。 - 不支持复杂的数学表达式(如括号运算),但可以通过多次
set /a命令来实现类似的效果。
所以,bat本身支持的运算不多,但是可以使用外部工具进行浮点数运算。
例如,可以通过调用 PowerShell 来进行浮点数运算:
@echo off
set a=123.45
set b=45.67
powershell -Command "$a = %a%; $b = %b%; $c = $a + $b; Write-Output $c"
输出:
169.12
4. 常用基本命令–基本文件操作
dir # 列出目录内容
cd # 更改目录
mkdir # 创建目录
rmdir # 删除目录
del # 删除文件
copy # 复制文件或目录
move # 移动或重命名文件或目录
type # 显示文件内容
以下是这些命令的用法及其执行后的效果:
-
dir- 用法:
dir - 执行后:列出当前目录下的所有文件和子目录的名称、大小、修改日期等信息。
- 用法:
-
cd
- 用法:
cd 路径\到\目录 - 执行后:更改当前工作目录到指定的路径。例如,如果当前目录是
C:\Users\你的用户名,输入cd C:\Program Files后,当前目录将变为C:\Program Files。
mkdir
- 用法:
mkdir 新目录名 - 执行后:在当前目录下创建一个名为“新目录名”的新目录。
rmdir
- 用法:
rmdir 空目录名 - 执行后:删除当前目录下的一个空目录。如果目录非空,命令会失败。
del
- 用法:
del 文件名.txt - 执行后:删除当前目录下的指定文件。如果文件不存在,会报错。
copy
- 用法:
copy 源文件.txt 目标路径\ - 执行后:将“源文件.txt”复制到“目标路径”下,保留原文件。
move
- 用法:
move 旧文件名.txt 新路径\新文件名.txt - 执行后:将“旧文件名.txt”移动到“新路径”下,并可以同时重命名为“新文件名.txt”。如果新路径不存在,命令会失败。
type
- 用法:
type 文件名.txt - 执行后:在命令提示符窗口显示指定文本文件的内容。
5. 打印、输入、输出命令:echo
-
打印文本
- 示例:
echo 你好,世界!- 执行后:在命令提示符窗口中输出“你好,世界!”。
-
显示变量的值
- 示例:
set 变量名=值 - 示例:
echo %变量名% - 执行后:首先设置一个名为“变量名”的变量,其值为“值”。然后,
echo %变量名%命令会输出该变量的值。
- 示例:
-
输入文件
- 示例:
echo 这是文件内容 > 文件名.txt - 执行后:将“这是文件内容”写入“文件名.txt”文件中。如果文件已经存在,其内容将被覆盖。
- 示例:
echo 这是追加的内容 >> 文件名.txt - 执行后:将“这是追加的内容”追加到“文件名.txt”文件的末尾,不会覆盖原有内容。
- 示例:
7. 条件语句
if 语句
if condition (commands
)
例如:
if "%MY_VAR%"=="Hello, World!" (echo 变量匹配
)
比较运算符
==:等于(字符串比较)!=:不等于(字符串比较)EQU:等于(整数比较)NEQ:不等于(整数比较)LSS:小于(整数比较)LEQ:小于等于(整数比较)GTR:大于(整数比较)GEQ:大于等于(整数比较)EXIST:文件存在NOT EXIST:文件不存在
三元运算符: && 和 ||
&&:前一个命令成功时执行后一个命令。||:前一个命令失败时执行后一个命令。
dir file.txt && echo 文件存在 || echo 文件不存在
8. 循环
for 循环
for %%var in (list) do (::这里的%%var表示变量名,这个用法只能且必须用在循环变量中。commands
)
例如:
for %%i in (1 2 3 4 5) do (echo 循环变量 i 是 %%i
)
while 循环
.bat 文件本身不直接支持 while 循环,但可以通过 goto 和 if 语句模拟:
@echo off
set count=1
:loop
if %count% leq 5 (echo 计数器是 %count%set /a count+=1goto loop
)
9. 脚本执行
编写完 .bat 文件后,可以直接在命令提示符中运行:
script.bat
script::bat文件的特权:当运行它的时候,不需要加上它的后缀。
总结
BAT脚本语言是以各种bash命令为主导的,和其他编程语言有着类似的功能,如支持条件分支、循环遍历、变量与运算等等;也有他自己的独特之处,即主要组织各种文件及其内容。下一篇笔记中将会涉及更多有关组织多个文件的BAT脚本用法。
如果真有所谓运势,那大概是吸收天地灵气得到的一些Buff?
相关文章:
<电子幽灵>开发笔记:BAT基础笔记(一)
BAT脚本基础笔记(一) 介绍 费曼学习法最重要的部分,即把知识教给一个完全不懂的孩子——或者小白。 为了更好的自我学习,也为了让第一次接触某个知识范畴的同学快速入门,我会把我的学习笔记整理成电子幽灵系列。 提示:作为低代码…...
PiliPalaX ( 第三方安卓哔哩哔哩)
PiliPalaX 是一款哔哩哔哩第三方客户端。使用 Flutter 开发,基于PiliPala原版基础上创作出来的X升级版,目前支持Android、IOS客户端。 应用特色 目前着重移动端(Android、iOS)和Pad端,暂时没有适配桌面端、手表端等 https://pan.quark.cn/s/…...
在亚马逊云科技上高效蒸馏低成本、高精度的Llama 3.1 405B模型(上篇)
在2024年的亚马逊云科技re:Invent全球云计算春晚里,亚马逊云科技CEO - Matt Garman介绍了亚马逊云科技的AI模型托管平台Amazon Bedrock上的模型蒸馏服务Model Distillation,令小李哥印象十分深刻。该功能可自动化地为特定场景的知识创建一个蒸馏模型。它…...
Amazon MSK 开启 Public 访问 SASL 配置的方法
1. 开启 MSK Public 1.1 配置 MSK 参数 进入 MSK 控制台页面,点击左侧菜单 Cluster configuration。选择已有配置,或者创建新配置。在配置中添加参数 allow.everyone.if.no.acl.foundfalse修改集群配置,选择到新添加的配置。 1.2 开启 Pu…...
LeetCode_438.找到字符串中所有字母异位词
给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 示例 1: 输入: s "cbaebabacd", p "abc" 输出: [0,6] 解释: 起始索引等于 0 的子串是 "cba", 它是 "a…...
一文读懂服务器的HBA卡
什么是 HBA 卡 HBA 卡,全称主机总线适配器(Host Bus Adapter) ,是服务器与存储装置间的关键纽带,承担着输入 / 输出(I/O)处理及物理连接的重任。作为一种电路板或集成电路适配器,HBA…...
Debezium日常分享系列之:对于从Oracle数据库进行快照的性能优化
Debezium日常分享系列之:对于从Oracle数据库进行快照的性能优化 源数据库Kafka Connect监控测试结果 源数据库 Oracle 19c,本地,CDB数据库主机的I/O带宽为6 GB/s,由此主机上运行的所有数据库共享临时表空间由42个文件组成&#x…...
深度学习 Pytorch 基本优化思想与最小二乘法
在正式开始进行神经网络建模之前,我们还需要掌握pytorch中最核心的基础数学工具——autograd(自动微分)模块。虽然对于任何一个通用的深度学习框架都会提供许多自动优化的算法和现成的loss function,但如果想更深入理解神经网络,对深度学习的…...
C# 实现系统信息监控与获取全解析
在 C# 开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途。比如在系统性能优化工具中,需要实时读取 CPU、GPU 资源信息;在一些特殊的输入记录程序里,可能会涉及到键盘监控;而在图形界面开发中…...
Transformer详解:Attention机制原理
前言 Hello,大家好,我是GISer Liu😁,一名热爱AI技术的GIS开发者,本系列文章是作者参加DataWhale2025年1月份学习赛,旨在讲解Transformer模型的理论和实践。😲 本文将详细探讨Attention机制的原理…...
网络安全技术深度解析与实践案例
网络安全技术深度解析与实践案例 随着信息技术的飞速发展,网络已成为现代社会不可或缺的一部分。然而,网络空间的开放性也带来了各种安全隐患。为了保障网络和数据的安全,网络安全技术显得尤为重要。本文将深入探讨网络安全技术的核心要素,并通过Python代码示例展示其具体…...
JavaScript中提高效率的技巧一
1.生成随机颜色的两种方式 1).生成RandomHexColor const generateRandomHexColor () > {return #${Math.floor(Math.random() * 0xffffff).toString(16).padStart(6, 0)} } generateRandomHexColor() // #a8277c generateRandomHexColor() // #09c20c generat…...
美食推荐系统 协同过滤余弦函数推荐美食 Springboot Vue Element-UI前后端分离
个性化美食推荐系统 协同过滤余弦函数推荐美食 Echart数据统计 Springboot Vue Element-UI前后端分离 【亮点功能】 1.SpringbootVueElement-UIMysql前后端分离 2.Echarts图表统计数据, 直观展示数据情况 3.发表评论后,用户可以回复评论, 回复的评论可以被再次回复,…...
ThinkPHP 8的一对多关联
【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书 使用VS Code开发ThinkPHP项目-CSDN博客 编程与应用开…...
Django简介与虚拟环境安装Django
目录 1.Django简介 1.1 Django 的核心特点 1.2 Django 的核心组件 1.3 Django 的应用场景 1.4 总结 2.基础环境建立 2.1 创建虚拟环境 2.1.1 使用 virtualenv 创建虚拟环境 2.1.2 使用 venv 创建虚拟环境 2.2 激活虚拟环境 2.2.1 在 Windows 上 2.2.2 在 macOS 或 …...
Redis延迟队列详解
以下是对 Redis 延迟队列的详细解释: 一、什么是 Redis 延迟队列 Redis 延迟队列是一种使用 Redis 实现的消息队列,其中的消息在被消费之前会等待一段时间,这段时间就是延迟时间。延迟队列常用于一些需要延迟处理的任务场景,例如订…...
一文大白话讲清楚webpack基本使用——2——css相关loader的配置和使用
一文大白话讲清楚webpack基本使用——2——css相关loader的配置和使用 1. 建议按文章顺序从头看是看 第一篇:一文大白话讲清楚啥是个webpack第二篇:一文大白话讲清楚webpack基本使用——1——完成webpack的初步构建然后看本篇,Loader的配置…...
第二代增强-采购申请屏幕增强
这篇文章可能有点乱,但是都是学习的一个过程,问题就是在ME52N修改采购申请增强字段之后,点击保存之后无法更新到数据库,困扰了很久,终于解决了,特此记录 文章目录 需求创建增强结构测试屏幕ZXM02TOP创建屏幕…...
图论DFS:黑红树
我的个人主页 {\large \mathsf{{\color{Red} 我的个人主页} } } 我的个人主页 往 {\color{Red} {\Huge 往} } 往 期 {\color{Green} {\Huge 期} } 期 文 {\color{Blue} {\Huge 文} } 文 章 {\color{Orange} {\Huge 章}} 章 DFS 算法:记忆化搜索DFS 算法…...
零基础一篇打通Vue极速通关教程
文章目录 写给零基础看的Vue极速掌握教程第1章 Vue简介1.1 Vue 概述1.2 MVVM 模式1.3 WebStorm开发工具1.3.1 WebStorm简介1.3.2 集成Vue开发调试工具 第2章 Vue的事件绑定2.1 Vue基本使用2.1.1 插值表达式2.1.2 注意事项 2.2 Vue事件绑定2.1.1 点击事件2.2.2 键盘事件2.2.3 移…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...
从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...
(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
大模型——基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程
基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程 下载安装Docker Docker官网:https://www.docker.com/ 自定义Docker安装路径 Docker默认安装在C盘,大小大概2.9G,做这行最忌讳的就是安装软件全装C盘,所以我调整了下安装路径。 新建安装目录:E:\MyS…...
【Java】Ajax 技术详解
文章目录 1. Filter 过滤器1.1 Filter 概述1.2 Filter 快速入门开发步骤:1.3 Filter 执行流程1.4 Filter 拦截路径配置1.5 过滤器链2. Listener 监听器2.1 Listener 概述2.2 ServletContextListener3. Ajax 技术3.1 Ajax 概述3.2 Ajax 快速入门服务端实现:客户端实现:4. Axi…...
