<电子幽灵>开发笔记: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 移…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...

VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...

佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...

android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
第三周 Day 3 🎯 今日目标 理解类(class)和对象(object)的关系学会定义类的属性、方法和构造函数(init)掌握对象的创建与使用初识封装、继承和多态的基本概念(预告) &a…...