Windows:批处理脚本学习
目录
一、第一个批处理文件
1. &&和 | |
2. | 和 &
二、变量
1.传参变量%name
2.初始化变量set命令
3.变量的使用
4.局部变量与全局变量
5.使用环境变量
6.扩充变量语法
三、注释REM和 ::
四:函数
1.定义函数
2.调用函数(传参)
3.带返回值的函数
五、运算符
1.算术运算符
2.关系运算符
3.逻辑运算符
六、IF-ELSE条件判断语句
七、循环语句
1.遍历内容(for /f 用法)
案例:输出文本内容
2.计数循环(for /l)
八、文件操作
1.创建新文件(输出) >
2.追加写入文件 >>
九、注册表
1.查看注册表信息
2.添加注册表信息
3.删除注册表信息
十、输入/输出
1.静默处理
十一、网络
参考资料:
批处理脚本是以.bat结尾,写在记事本的脚本代码。 这种类型的文件通过称为命令解释器的系统文件提供的接口(有时称为 shell)来识别和执行。 在 Windows 系统上,此解释器称为 cmd.exe。
常用命令汇总:Windows:DOS命令-BAT批处理学习_dos命令做bat-CSDN博客
一、第一个批处理文件
@echo off
Rem This is for listing down all the files in the directory Program files
dir "C:\Program Files" > C:\lists.txt
echo "The program has completed"
每个命令占一行,一行使用多个命令需要用&符号连接。
第一个命令的目的是关闭该显示。 命令"echo off"关闭整个脚本的显示,"echo off"命令本身除外。 前面的"at"符号"@"使该命令也适用于其自身。
1. &&和 | |
语法:&&
command1 && command2 && command3 ...
只有左边的命令被执行且返回1,才会执行右边的命令 。
语法:| |
command1 || command2
只有左边的命令被执行且返回0,才会执行右边的命令 ,也就是说如果左边的命令没执行成功才会执行右边的命令。
2. | 和 &
语法: 管道符 |
dir | find "cache"
把左边的输出内容,作为右边的输入。
语法: 顺序执行&
command1 & command2 & command3 ...
顺序执行多条命令,不管命令是否执行成功,可以用来连接命令。
二、变量
批处理文件中有两种类型的变量。 一种是调用批处理文件时可以传递的参数(以%开头进行声明),另一种是通过set命令完成的。
1.传参变量%name
变量需要通过传参才能赋值使用,一次传参后面也可以使用,值是被写入内存,可以复用。这种变量是采用%开头+变量名,变量名需要符合一定的规范,不能是关键字或已定义的系统环境变量,比如IF、FOR、ERRORLEVEL等。
@echo off echo %1 %2 %3 pause
2.初始化变量set命令
用于设定初始化变量,不能通过传参赋值的变量。
set /A variable-name=value
variable-name:是您要设置的变量的名称。
value: 是需要针对变量设置的值。
/A : 如果值本质上是数字,则必须使用此开关。
3.变量的使用
使用变量需要将变量用两个%括起来,注意单个左百分号表示传参变量。以下为具体案例。
@echo off SET /A a = 5 SET /A b = 10 SET /A c = %a% + %b% echo %c%
4.局部变量与全局变量
默认情况下,变量对于整个命令提示符会话是全局的。 调用 SETLOCAL 命令使变量成为脚本范围的本地变量。 调用 SETLOCAL 后,任何变量分配都会在调用 ENDLOCAL、调用 EXIT 或执行到脚本中的文件末尾 (EOF) 时恢复。
案例:
@echo off
set globalvar = 5
SETLOCAL
set var = 13145
set /A var = %var% + 5
echo %var%
echo %globalvar%
ENDLOCAL
关于上述程序需要注意的一些关键事项。
-
"globalvar"是在全局范围内定义的,并且在整个脚本中都可用。
-
"var"变量是在本地范围内定义的,因为它包含在"SETLOCAL"和"ENDLOCAL"块之间。 因此,一旦执行"ENDLOCAL"语句,该变量就会被销毁。
5.使用环境变量
Desktop是自定义环境变量。
6.扩充变量语法
对于%~dp0第一次见,把它误认为函数的传参变量,后面才发现其实并不是函数里使用的。%0代表本身,在全局使用,则代表整个批处理文件,而在函数里,%0代表函数名。
~是扩展的意思,相当于把一个相对路径转换绝对路径
%0代指批处理文件自身
%1表示批处理文件命令行接收到的第一个参数,%2表示第二个,以此类推
%~d0 是指批处理所在的盘符,其中d代表drive
%~p0 是指批处理所在的目录,其中p代表path
%~dp0 是批处理所在的盘符加路径
案例:
echo %~dp0
pause
运行结果
选项 | 解释 |
---|---|
%~0 | 文件本身 |
%~d0 | 文件所在驱动号 |
%~p0 | 文件所在路径(仅路径,少了驱动器号) |
%~n0 | 文件名 |
%~x0 | 文件拓展名 |
%~s0 | 用~省略的部分路径 |
%~a0 | 文件属性 |
%~t0 | 文件日期 |
%~z0 | 文件大小 |
可组合使用,就比如%~dp0。
三、注释REM和 ::
注释方法有两种,一种 是REM的注释方法,一种是两个分号 : : 的注释方法,::注释的方法更为推荐,执行速度更快。
四:函数
1.定义函数
语法:
以单分号开头的,同一个文件里可以不使用EXIT,结束标志以回车空行做分界线。
:function_name
Do_something
EXIT /B 0
::/B可以在退出时,不显示信息,输出更加整洁
案例:
@echo off
echo %1 %2 %3
echo %2%
call :eejdjdjdj
pause:eejdjdjdjecho helloecho wwwww
2.调用函数(传参)
语法:
想要其能够传参到函数内部,就需要使用传参变量%~+参数位置编号,这是给函数传参的变量,需要和前面的传参变量作出区别。
Call :function_name parameter1, parameter2… parametern
案例 :
@echo off
SETLOCAL
CALL :Display 5 , 10
EXIT /B %ERRORLEVEL%
:Display
echo The value of parameter 1 is %~1
echo The value of parameter 2 is %~2
3.带返回值的函数
语法:
使用 set 命令和波形符 (~) 字符以及参数的位置编号在函数中设置返回值,将返回值赋值给value1, value2… valuen。
Call :function_name value1, value2… valuen
案例 :
@echo off
SETLOCAL
CALL :SetValue value1,value2
echo %value1%
echo %value2%:SetValue
set "%~1 = 5"
set "%~2 = 10"
五、运算符
1.算术运算符
2.关系运算符
3.逻辑运算符
六、IF-ELSE条件判断语句
注意: ELSE分别和两个括号需要有空格,GTR也要有空格。
示例:
@echo off
set /A a=1
set /A b=1
echo %a%
IF (%a% GTR %b%) (echo yes
) else (echo no
)
pause
七、循环语句
语法:
在cmd窗口中,for之后的形式变量I必须使用单百分号引用,即%i;而在批处理文件中,引用形式变量i必须使用双百分号,即%%i。
FOR %%variable IN (set) DO ( command [command-parameters] )
@echo off
set list=1 2 3 4
(for %%a in (%list%) do ( echo %%a
))
案例:
@echo off
for /f "delims=," %%i in (test.txt) do echo %%i
pause
@echo off
for %%I in (bbs.bathome.net) do echo %%I
pause
1.遍历内容(for /f 用法)
for /f 用法具有多种形式:
1、for /f %%i in (文件名) do (……)
2、for /f %%i in ('命令语句') do (……)
3、for /f %%i in ("字符串") do (……)
4、for /f "usebackq" %%i in ("文件名") do (……)
5、for /f "usebackq" %%i in (`命令语句`) do (……)
6、for /f "usebackq" %%i in ('字符串') do (……)总而言之,没使用增强型参数usebackq文件不需要符号括起来,字符串要双引号,命令要单引号。如果使用则文件名需要双引号括起来,命令需要反引号,而字符串需要单引号。增强型参数的作用是处理文件名内含有特殊符号的情况。
案例:输出文本内容
@echo off
for /f %%i in (test.txt) do echo %%i
pause
案例: 切分字符串delims=和定点提取tokens=
切分delims=等号后面为分界符,定点选取tokens=等号后面为数字(可选取多个数字),代表第几个字段(由delims切割的)
单个 :
@echo off
for /f "delims=, token=1" %%i in (hello.txt) do echo %%i
pause
多个:
如果 tokens= 后面指定了多个数字,如果形式变量为%%i,那么,第一个数字指代的内容用第一个形式变量%%i来接收,第二个数字指代的内容用第二个形式变量%%j来接收,第三个数字指代的内容用第三个形式变量%%k来接收……第N个数字指代的内容用第N个形式变量来接收,其中,形式变量遵循字母的排序,第N个形式变量具体是什么符号,由第一个形式变量来决定:如果第一个形式变量是%%i,那么,第二个形式变量就是%%j;如果第一个形式变量用的是%%x,那么,第二个 形式变量就是%%y。
@echo off
for /f "delims=, tokens=2,5" %%i in (test.txt) do echo %%i %%j
pause
案例:跳行 skip=n
n表示跳过n行
@echo off
for /f "skip=2" %%i in (test.txt) do echo %%i
pause
案例:忽略以指定字符打头的行eol=
等号后面只能接一个字符
@echo off
for /f "eol=;" %%i in (test.txt) do echo %%i
pause
2.计数循环(for /l)
语法:
for /l %%i in (x,y,z) do (……)
在这个语句中,x、y和z都只能取整数,正负皆可,x指代起始值,y指代步长,z为终止值,具体含义为:从x开始计数,以y为步长,直至最接近 z的那个整数值为止,这之间有多少个数,do后的语句就执行多少次。
八、文件操作
1.创建新文件(输出) >
> 符号的作用是存在即覆盖,不存在即新建,也可以>NUL来丢弃命令的输出。
IF NOT EXIST "%ProgramW6432%" (ECHO 此为64位版 &PING 127.1 /n 2 >NUL&EXIT)
2.追加写入文件 >>
>> 符号的作用是存在即行末追加写入,不存在即新建。
案例:
@echo offecho %1 %2 %3 > h.txt
echo %2% >>helle.txt
call :eejdjdjdj
pause:eejdjdjdjecho hello >>helle.txtecho wwwww
九、注册表
1.查看注册表信息
语法一:查询所有的子项和值
reg query "HKCU\Software\SweetScape\010 Editor" /s
语法二:根据项值名称进行查询
REG QUERY KeyName /v /f Data
- /v :指定要搜索的值名称。
- /f : 指定搜索数据的模式。
- Data:可用正则表达式进行字符串匹配。
案例:
reg query "HKCU\Software\SweetScape\010 Editor" /v /f W*
语法三:根据项值的数据类型进行查询
REG QUERY KeyName /t Type
/ t 指定要查询的类型,它后面跟的值必须是下面的其中之一:
- REG_SZ
- REG_MULTI_SZ
- REG_DWORD_BIG_ENDIAN
- REG_DWORD
- REG_BINARY
- REG_DWORD_LITTLE_ENDIAN
- REG_LINK
- REG_FULL_RESOURCE_DESCRIPTOR
- REG_EXPAND_SZ
案例:
reg query "HKCU\Software\SweetScape\010 Editor" /t REG_SZ
语法四:根据项值的数据进行查询
REG QUERY KeyName /d /f Data
- /d :指定要搜索的数据内容(项值的数据)。
- /f : 指定搜索数据的模式。
- Data:可用正则表达式进行字符串匹配。
2.添加注册表信息
语法:
reg add <keyname> [/v valuename | /ve] [/t datatype] [/d data] [/f]
与查询其实差不多,选项信息如下:
- /v : 添加项值的名称
- / t : 添加项值的类型
- /d : 添加项值的数据
- / f : 在不提示确认的情况下添加项值
案例:要将名为 DATA 的值、类型为 REG_BINARY 且数据为 fe340ead 的注册表项添加到 HKLM\Software\MyCo
reg add HKLM\Software\MyCo /v Data /t REG_BINARY /d fe340ead
案例:要将名为 Path、类型为 REG_EXPAND_SZ 且数据为 %systemroot% 的扩展注册表项添加到 HKLM\Software\MyCo
reg add HKLM\Software\MyCo /v Path /t REG_EXPAND_SZ /d ^%systemroot^%
对于 REG_EXPAND_SZ 项类型,请在 /d 参数内将插入符号 (^) 与 % 结合使用。
3.删除注册表信息
语法:
reg delete <keyname> [/v valuename] [/f]
有选用/v表示是根据项值的名称删除项值,没有选用表示删除的是项,而/f 的作用就是静默处理,不提示确认的情况直接删除。
案例:删除名为 ZODIAC 的计算机上 HKLM\Software\MyCo 下的注册表值 MTU
reg delete \\ZODIAC\HKLM\Software\MyCo /v MTU
案例:要删除注册表项 Timeout 及其所有子项和值
reg delete HKLM\Software\MyCo\MyApp\Timeout
十、输入/输出
键盘输入、在屏幕上打印文本以及在屏幕上打印错误共有三个通用"文件"。 "标准输入"文件,称为 stdin,包含程序/脚本的输入。 "标准输出"文件,称为stdout,用于写入输出以在屏幕上显示。 "标准错误"文件,称为 stderr,其包含要在屏幕上显示的所有错误消息。
这三个标准文件中的每一个(也称为标准流)均使用数字 0、1 和 2 进行引用。Stdin 是文件 0,stdout 是文件 1,stderr 是文件 2。
1.静默处理
REG QUERY "HKU\S-1-5-19">NUL 2>&1
REG QUERY "HKU\S-1-5-19">NUL这句话是将标准输出流1的输出数据进行丢弃,而 2>&1是将标准错误流重定向到标准输出流的地址,目的为了将两个流合并,从而实现一起丢弃,实现静默化处理。
十一、网络
参考资料:
批处理脚本教程 (w3ccoo.com)
reg add | Microsoft Learn
DOS批处理中%~dp0等扩充变量语法详解 - NAVYSUMMER - 博客园 (cnblogs.com)
相关文章:

Windows:批处理脚本学习
目录 一、第一个批处理文件 1. &&和 | | 2. | 和 & 二、变量 1.传参变量%name 2.初始化变量set命令 3.变量的使用 4.局部变量与全局变量 5.使用环境变量 6.扩充变量语法 三、注释REM和 :: 四:函数 1.定义函数 2.…...

Dav_笔记10:Using SQL Plan Management之4
SQL管理库 SQL管理库(SMB)是驻留在SYSAUX表空间中的数据字典的一部分。它存储语句日志,计划历史记录,SQL计划基准和SQL配置文件。为了允许每周清除未使用的计划和日志,SMB使用自动空间管理。 您还可以手动将计划添加到SMB以获取一组SQL语句。从Oracle Database 11g之前的…...

通过json传递请求参数,如何处理动态参数和接口依赖
嗨,大家好,我是兰若姐姐,今天给大家讲一下如何通过json传递请求参数,如何处理动态参数和接口依赖 1. 使用配置文件和模板 在 test_data.json 中,你可以使用一些占位符或模板变量,然后在运行测试之前&…...

[240727] Qt Creator 14 发布 | AMD 推迟 Ryzen 9000芯片发布
目录 Qt Creator 14 发布Qt Creator 14 版本发布,带来一系列新功能和改进终端用户可通过命令行方式查看此新闻终端用户可通过命令行方式安装软件: AMD 推迟 Ryzen 9000芯片发布 Qt Creator 14 发布 Qt Creator 14 版本发布,带来一系列新功能…...

PLSQL Developer工具查询数据,报错(动态性能表不可访问)
解决的问题: 解决方案: 在配置-首选项-选项,取消勾选“自动统计”,保存之后即可查询数据...

基于 HTML+ECharts 实现智慧交通数据可视化大屏(含源码)
构建智慧交通数据可视化大屏:基于 HTML 和 ECharts 的实现 随着城市化进程的加快,智慧交通系统已成为提升城市管理效率和居民生活质量的关键。通过数据可视化,交通管理部门可以实时监控交通流量、事故发生率、道路状况等关键指标,…...

探索 IT 领域的新宠儿:量子计算
目录 引言:从经典到量子的飞跃 量子计算的基本概念 量子计算的独特优势 量子计算的深度剖析 量子计算的最新进展 量子计算的行业应用前景 面临的挑战与未来展望 结语:迎接量子计算的新时代 引言:从经典到量子的飞跃 在信息技术飞速发…...

TSPNet代码分析
论文《Realigning Confidence with Temporal Saliency Information for Point-Level Weakly-Supervised Temporal Action Localization》的official code分析 论文解读 代码分析 先看看训练过程,执行main if __name__ == __main__:exp = Exp()if exp.config.mode == eval:…...

Ubuntu上安装anaconda创建虚拟环境(各种踩坑版)
之前都是在Windows桌面版进行深度学习的环境部署及训练,今天尝试了一下在Ubuntu上进行环境部署,踩了不少坑,提供一些解决办法给大家避雷。 目录 一、下载和安装anaconda 1. 下载 2. 安装 二、创建虚拟环境 一、下载和安装anaconda 1. …...

DC-5靶机通关
今天我们来学习DC-5靶机!!! 1.实验环境 攻击机:kali2023.2 靶机:DC-5 2.1扫描网段 2.2扫描端口 这里后面这俩端口有点似曾相识啊,在dc3里面好像见过,那咱们给这两个端口来个更详细的扫描&…...

AI学习记录 -使用react开发一个网页,对接chatgpt接口,附带一些英语的学习prompt
实现了如下功能(使用react实现,原创) 实现功能: 1、对接gpt35模型问答,并实现了流式传输(在java端) 2、在实际使用中,我们的问答历史会经常分享给他人,所以下图的 copy …...

MongoDB多数据源配置与切换
在MongoDB中配置和使用多数据源主要涉及以下几个步骤: 定义多个数据源的配置: 在应用程序的配置文件中,定义多个MongoDB的数据源,例如在Spring Boot中可以通过application.yml或application.properties文件进行配置。 创建多个Mo…...

Mongodb入门介绍
文章目录 1、Mongodb:NoSQL数据库,分布式的文档型数据库2、适合场景:3、不适合场景:4、概念5、总结 1、Mongodb:NoSQL数据库,分布式的文档型数据库 2、适合场景: 1、web网站数据存储ÿ…...

docker前端部署
挂载,把自己的目录位置,挂载到容器内的HTML...

指标体系建设的方法论
一、分析痛点 了解当前数仓侧与业务应用方对指标到不到、难使用的痛点及日常指标使用习惯,制定指标中心所需功能并设计指标中心样式。 二、指定指标规范 定义指标类型、指标使用方、确定指标域(这里是数据域)、指标要具备的属性(业务/技术口径、负责人、类型等)。 …...

乐鑫ESP32-H2设备联网芯片,集成多种安全功能方案,启明云端乐鑫代理商
在数字化浪潮的推动下,物联网正以前所未有的速度融入我们的日常生活。然而,随着设备的激增,安全问题也日益成为公众关注的焦点。 乐鑫ESP32-H2致力于为所有开发者提供高性价比的安全解决方案,这款芯片经过专门设计以集成多种安全…...

C++调用Java接口
一、配置Java环境 安装jdk,我这里使用jdk1.8 32位版本,下载地址:https://www.oracle.com/java/technologies/downloads/#java8-windows 下载安装后,设置环境变量: JAVA_HOME C:\Program Files (x86)\Java\jdk-1.…...

C# datetimePicker
1. 直接把控件拉到设计器中,此时不要调整控件的values属性,这样就可以 打开后每次默认显示当天日期。 2. 属性Format long长日期格式默认值short短日期格式Time时间格式custom自定义时间格式在customFormat这个属性设置,比如yyyy-MM-dd HH…...

AI有关的学习和python
一、基本概念 AIGC(AI Generated content AI 生成内容) AI生成的文本、代码、图片、音频、视频。都可以成为AIGC。 Generative AI(生成式AI)所生成的内容就是AIGC AI指代计算机人工智能,模仿人类的智能从而解决问题…...

前端node.js入门
(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 Node.js 入门概览 什么是Node.js? 为什么选择Node.js? 基础安装与环境配置 安装…...

无需标注的数据集
0:人 1:自行车 2:汽车 3:摩托车 4:飞机 5:公交车 6:火车 7:卡车 8:船 9:交通信号灯 10:消火栓 11:停车标志 12:停车计时器…...

C# 抽象工厂模式
栏目总目录 概念 抽象工厂模式是一种创建型设计模式,它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。在抽象工厂模式中,一个抽象的工厂类负责定义创建产品对象的接口,但是具体工厂类将负责创建具体的产…...

java中 两个不同类对象list,属性一样,如何copy
如果您有两个不同的类,但它们拥有相同的属性,并且您想要从一个类的列表复制到另一个类的列表,您可以使用以下方法: 使用循环: 您可以遍历原始列表,并为每个元素创建目标类的新实例。 使用 Stream API&…...

文件上传总结
一、原理 通过界面上的上传功能上传了一个可执行的脚本文件,而WEB端的系统并未对其进行检测或者检测的逻辑做的不够好,使得恶意用户可以通过文件中上传的一句话木马获得操控权 二、绕过方法 1>前端绕过 1.删除前端校验函数 checkFile() 2.禁用js…...

网页突然被恶意跳转或无法打开?DNS污染怎么解决?
前言 在网上冲浪时,我们时常会遭遇DNS污染这一区域性攻击,几乎无人能幸免。受影响时:尝试访问正规网站可能会被错误导向赌博、色情或其他恶意站点。 1.我们为什么需要DNS 当我们想要访问一个网站时,就像拨打朋友的电话号码一样…...

Matlab进阶绘图第65期—带分组折线段的柱状图
带分组折线段的柱状图是在原始柱状图的基础上,在每组柱状图位置处分别添加折线段,以进行对比或添加额外信息。 由于Matlab中未收录带分组折线段的柱状图的绘制函数,因此需要大家自行设法解决。 本文使用自制的BarwithGroupedLine小工具进行…...

EasyMedia转码rtsp视频流flv格式,hls格式,H5页面播放flv流视频
在本文中,我们将介绍如何使用 EasyMedia 将 RTSP 视频流转码为 FLV 和 HLS 格式,并在 H5 页面上播放 FLV 流视频。EasyMedia 是一个支持多种流媒体协议的开源项目,非常适合用于这种转码和流媒体传输的场景。 前提条件 已经安装并配置好 Eas…...

FPGA实验6: 有时钟使能两位十进制计数器的设计
一、实验目的与要求 1.. 熟练掌握使用原理图设计较复杂电路; 2. 学习原理图设计中总线的表示以及使用方法。 二、实验原理 运用Quartus II 集成环境下的图形设计方法设计有时钟使能的两位十进制计数器。进行波形仿真和分析、引脚分配并下载到实验设备上进行功能…...

C# 委托函数 delegate
在C#中,委托(Delegate)是一种特殊的类型,它可以持有对方法的引用。 委托是实现事件的基础。事件本质上是多播委托,允许多个方法被触发 委托允许你将方法作为参数传递给其他方法,或者将方法作为返回值从方法…...

Vue3响应式高阶用法之`shallowReadonly()`
Vue3响应式高阶用法之shallowReadonly() 在现代前端开发中,Vue3 提供了丰富的响应式 API 来帮助开发者更高效地管理状态和数据。其中,shallowReadonly() 是一个非常有用的工具,适用于需要部分只读状态的场景。本文将详细介绍 shallowReadonl…...