Windows:批处理脚本学习

news2024/9/21 3:28:37

目录

一、第一个批处理文件

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

:eejdjdjdj
 echo hello

echo 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 off

echo %1 %2 %3 > h.txt
echo %2% >>helle.txt
call :eejdjdjdj
pause

:eejdjdjdj
 echo hello >>helle.txt

echo 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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1948341.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙 Navigation VS Router 对比

当前HarmonyOS支持两套路由机制&#xff08;Navigation和Router&#xff09;&#xff0c;Navigation作为后续长期演进及推荐的路由选择方案&#xff0c;其与Router比较的优势如下&#xff1a; 易用性层面&#xff1a; Navigation天然具备标题、内容、回退按钮的功能联动&…

看 Unity 组件的源码 —— ILSpy

ILSpy 是开源的 .NET 程序集浏览器和解编译器。 下载 ILSpy ILSpy Github 地址&#xff1a;icsharpcode/ILSpy: .NET Decompiler with support for PDB generation, ReadyToRun, Metadata (&more) - cross-platform! (github.com) 它有 Release 包可以下载 也提供 IDE 的…

Cadence23学习笔记(十四)

ARC就是圆弧走线的意思&#xff1a; 仅打开网络的话可以只针对net进行修改走线的属性&#xff1a; 然后现在鼠标左键点那个走线&#xff0c;那个走线就会变为弧形&#xff1a; 添加差分对&#xff1a; 之后&#xff0c;分别点击两条线即可分配差分对&#xff1a; 选完差分对之后…

解锁创新:AI如何推动低代码应用的智能化

在当今快速变化的商业环境中&#xff0c;企业面临着前所未有的挑战和机遇。数字化转型已成为各行各业的必然趋势&#xff0c;企业需要迅速适应市场变化&#xff0c;提升客户体验&#xff0c;并降低开发成本。 这一背景下&#xff0c;低代码开发平台的崛起为企业提供了一种高效…

ICIP-2020-A Non-local Mean Temporal Filter for VideoCompression

在 libvpx、VP8、VP9 和 HEVC 等各种编码器实现中&#xff0c;早就发现在预处理阶段过程中从源视频信号去除噪声对客观压缩效率的提升存在好处。通常使用常规的块匹配运动搜索来构建运动轨迹&#xff0c;并沿着轨迹比较每对像素&#xff0c;根据像素间的差异确定时域滤波器系数…

SpringSecurity如何整合JWT

整合JWT 我们前几个小节&#xff0c;实现的是非前后端分离情况下的认证与授权的处理&#xff0c;目前大部分项目&#xff0c;都是使用前后端分离的模式。那么前后端分离的情况下&#xff0c;我们如何使用SpringSecurity来解决权限问题呢&#xff1f;最常见的方案就是SpringSe…

如何学习Airflow:糙快猛的大数据之路(附思维导图)

什么是Airflow? 在开始之前,让我们先简单了解一下Airflow是什么。Apache Airflow是一个开源的工作流管理平台。它允许你以代码的方式定义、调度和监控复杂的数据处理管道。 想象一下,你有一系列需要按特定顺序执行的任务,而且这些任务之间还有依赖关系,Airflow就是为解决这…

【NPU 系列专栏 1.1 -- NPU TOPS 算力的计算方式】

请阅读【嵌入式及芯片开发学必备专栏】 文章目录 NPU 算力MAC 阵列简介MAC 阵列特点 MAC 阵列的结构MAC 阵列架构示例 MAC 阵列计算举例示例计算 TOPS 计算方法 NPU 算力 OpenCV 算法会消耗很大一部分自动驾驶芯片的算力&#xff0c;在车上堆摄像头的同时也需要堆TOPS&#xf…

把 网页代码 嵌入到 单片机程序中,2024/7/25 17:33

把 网页代码 嵌入到 单片机程序中 废话不多说直接上结果: 代码中定义: const char* html" 处理过的网页代码 " ; 处理网页代码的 web 程序( 主要是 正则 把双引号 加 符号) <!DOCTYPE html> <html lang"en" style"background-color: rgba…

Python 爬虫 tiktok API 获取TIKTOK标签信息 数据采集

此接口可通过标签id一键查询到tiktok标签信息&#xff0c;如有需要&#xff0c;请点击文末链接联系我们。 详细采集页面如图 https://www.tiktok.com/tag/musicand?_r1&namemusicand&u_codeeab7jd1ha5l36c&_deab7h4fj9h9k1f&share_challenge_id2878999&…

CXL与NVME融合场景下, 计算存储应用案例分析

场景1:数据写入之前 目标是避免数据从存储设备传输到主机内存再返回存储设备的传统过程中的数据搬运成本。通过利用CXL和NVMe技术的结合&#xff0c;可以在存储层直接对数据进行处理&#xff0c;即所谓的计算存储&#xff08;Computational Storage&#xff09;。这特别适用于…

革新优选购物模式:重塑电商体验

在当今竞争激烈的电商市场中&#xff0c;革新优选购物模式以其独特的运营策略脱颖而出&#xff0c;其核心在于通过价格优化、激励机制创新以及社交网络的深度融合&#xff0c;激发消费者的购物热情&#xff0c;实现销售与用户忠诚度的双重飞跃。 一、合规运营&#xff0c;构建信…

Vue3 study

Vue3 工程 创建 还是能像 vue2 一样通过 vue-cli 创建&#xff0c;即 vue create projectName 但是官方更推荐 vite 创建&#xff0c;即 npm create vuelatest&#xff0c;然后从项目名开始配置 总结&#xff1a;入口在 index.html&#xff0c;它会引入 main.ts&#xff0c;…

Inxedu 因酷网校在线教育系统之sql注入代码审计

1 后台-/article/delete?articelId= 注入 全局搜索 ${,开启文件过滤,关注*Mapper.xml文件 点击进入ArticleMapper.xml,SQL注入点在第97行,使用$直接拼接了参数 查找哪里声明那个方法 点击deleteArticleByIds,查看谁调用了它。在ArticleDaoImpl调用 接着点击deleteArticl…

静态IP地址在网络安全中的角色解析与实测分析

在这个网络边界日益模糊的时代&#xff0c;每一次点击、每一次数据传输都有着安全问题。作为网络安全体系中的基石&#xff0c;静态IP地址的角色显得尤为重要而复杂。今天&#xff0c;我们的测评团队将带您深入剖析静态IP地址在网络安全中的多重角色&#xff0c;并通过两家代理…

谁是中国井村屋?背靠红豆产业链,年销2.5亿根小豆冰棍,井村屋极致产品力是如何策划的?

红豆棒冰是日本老字号“井村屋”旗下的招牌产品。 井村屋在日本以红豆产业链见长&#xff0c;凭借优质产业链打造的红豆棒冰很逆天&#xff0c;每年大约售出 2.5 亿根&#xff0c;日本1.2亿人口&#xff0c;相当于每人每年至少吃两根。 这个国民级单品是如何打造极致产品力的呢…

【爆】Stable Diffusion【真人模型】:全网最真实的亚洲女性大模型

模型v1下载&#xff1a;XXMix_9realisticSDXL-Checkpoint-展夜枭-LiblibAI 环境要求&#xff1a; gpu&#xff1a;12G 最好16G python&#xff1a;3.10 cuda&#xff1a;11.8 一、介绍 XXMix_9realisticSDXL是一个基于Stable Diffusion XL模型训练的微调模型&#xff0c;…

06 capture软件元器件库的管理与调用 07 元器件库与PCB封装库的关联与调用

06 capture软件元器件库的管理与调用 && 07 元器件库与PCB封装库的关联与调用 第一部分 06 capture软件元器件库的管理与调用一、获取元器件库的方法 第二部分 07 元器件库与PCB封装库的关联与调用 第一部分 06 capture软件元器件库的管理与调用 一、获取元器件库的方…

vue3 + antd vue 纯前端 基于xlsx 实现导入excel 转 json,将json数据转换XLSX导出(模版下载)

一、导入 0、关键代码 // 安装插件 npm i xlsx/yarn add xlsx // 导入xlsx import * as XLSX from xlsx; 点击提交的时候才整理数据。上传的时候文件保存在 state.form.file[0] 中的 // 定义字段映射关系 const fieldMap {sheet2json: {技能名称: skill_name,技能等级: …

ROS配置并同时驱动多个UVC相机(含功能包)

配置并同时驱动多个UVC相机&#xff0c;并将数据保存为ROS话题形式的bag文件。 ROS可以同时驱动多个UVC相机。要实现这个目标并将数据保存成ROS话题的形式&#xff0c;再保存为bag文件&#xff0c;可以按照以下步骤操作&#xff1a; 1. 安装必要的包 sudo apt-get update sud…