计算机技术基础 (bat 批处理)Note6

news2024/12/23 5:09:48

计算机技术基础 (bat 批处理)Note6

本节主要讲解FOR命令语句(循环)在 bat 批处理中的使用 (part 2)

变量延迟 命令语句

在没有开启变量延迟的情况下,批处理命令行中的变量改变,必须到下一条命令才能体现。
使用变量延迟,变量需要用以对感叹号 !! 括起来。
变量延迟语句:setlocal enabledelayedexpansion
示例 1:
bat 批处理文件

set a=123 & echo %a%
echo %a%
set a=456 & echo %a%
echo %a%
pause

运行结果可以看到:第一行 set a=123 & echo %a% 这个 echo 打印不出来任何东西,因为这是被 & 链接起来的一条命令,这一条命令对 变量 aset 定义变量要在这条命令执行完才会体现。即第二个 echo %a% 可以打印出来。同理第三条命令 (set a=456 & echo %a%) 对 a 的重新 set 要等第三条命令执行完毕后才能体现,在第三条命令中的 echo 打印的变量a依然是123,第四条命令 (echo %a%) 再打印就会更改成新的 456

C:\Users\rwq119\Desktop\test>set a=123   & echo
ECHO is on.

C:\Users\rwq119\Desktop\test>echo 123
123

C:\Users\rwq119\Desktop\test>set a=456   & echo 123
123

C:\Users\rwq119\Desktop\test>echo 456
456

C:\Users\rwq119\Desktop\test>pause
Press any key to continue . . .

开启变量延迟之后,bat 文件

setlocal enabledelayedexpansion
set a=123&echo !a!
set a=456&echo %a%
echo %a%
pause

结果显示,第一行开启了变量延迟,这个bat脚本里可以使用变量延迟。第二行 set a=123 & echo !a! 使用了变量延迟 !a! (注意一定要用 !! 括起来),这条命令会立即打印出来变量 %%a 的值 123。但是第三行没有使用变量延迟,变量依然使用 %%,所以依旧没有更新变量值,打印 456。

C:\Users\rwq119\Desktop\test>setlocal enabledelayedexpansion

C:\Users\rwq119\Desktop\test>set a=123  & echo !a!
123

C:\Users\rwq119\Desktop\test>set a=456  & echo 123
123

C:\Users\rwq119\Desktop\test>echo 456
456

C:\Users\rwq119\Desktop\test>pause
Press any key to continue . . .

示例2:

@echo off
setlocal enabledelayedexpansion
For %%i in (1,2,3) do (
	set a=%%i
	echo %a%
	echo !a!
)
pause

结果如下:

ECHO is off.
1
ECHO is off.
2
ECHO is off.
3
Press any key to continue . . .

首先我们要强调, for 语句虽然我们写的时候会拆分成多行,但事实上它会被认为成一行语句(一条命令)。之后正如结果所示,我们没有使用变量延迟的每次循环第二句 echo %a% 是无法打印出来的,因为在循环内定义的变量,循环执行完毕(for语句整体是一条命令)才能体现。但是每次循环可以打印出 echo !a! 的值。
其他拓展:
启动批处理文件中环境变量本地化,本地化将持续到出现匹配的 endlocal 命令或者到达批处理文件结尾为止。
语法: setlocal {enableextensions | disableextensions} {enabledelayedexpansion | disabledelayedexpansion}

  1. enableextensions:启用命令扩展,直到出现匹配的 endlocal 命令,无论 setlocal 命令之前的设置如何。命令扩展包括一系列额外的批处理命令和功能,比如 for /f 的高级功能、!变量! 的延迟扩展等。默认情况下,Windows 的 cmd.exe 是启用命令扩展的。
  2. disableextensions:禁用命令扩展,直到出现匹配的 endlocal 命令,无论 setlocal 命令之前的设置如何。这将关闭所有由命令扩展提供的额外功能,使批处理文件的行为更加接近传统的 DOS 批处理。
  3. enabledelayedexpansion:启用延迟的环境变量扩展,直到出现匹配的 endlocal 命令,无论 setlocal 命令之前的设置如何。这允许你在一个代码块(如 if 语句或 for 循环)内部修改一个变量,并立即通过 !变量名! 语法使用修改后的值。(上文讲述)
  4. disabledelayedexpansion:禁用延迟的环境变量扩展,直到出现匹配的 endlocal 命令,无论 setlocal 命令之前的设置如何。这将关闭延迟变量扩展功能,使得在代码块内部修改的变量不会立即生效。
    整体来讲,我们可以单独使用 setlocal 命令来启用或禁用命令扩展,也可以同时指定命令扩展和延迟变量扩展的状态。例如:
setlocal enableextensions enabledelayedexpansion

这将同时启用命令扩展和延迟变量扩展。如果我们想在批处理文件的某个特定点关闭这些功能,可以使用 endlocal 命令。endlocal 命令将结束由最近的 setlocal 命令创建的本地化环境设置,并恢复到之前的设置。
比如:

@echo off
setlocal enabledelayedexpansion
For %%i in (1) do (
	set a=%%i
	echo %a%
	echo !a!
)
endlocal
For %%i in (1) do (
	set a=%%i
	echo %a%
	echo !a!
)
pause

结果显示,当我们使用 endlocal 命令结束由最近的 setlocal 命令创建的本地化环境设置,并恢复到之前的设置后,下面的 echo !a! 不起作用了

ECHO is off.
1
ECHO is off.
!a!
Press any key to continue . . .

For /r 命令语句

For 参数 /r 命令说明:遍历文件夹,它会遍历指定目录和子目录下所有文件和文件夹,列举出文件夹和文件夹里面的所有文件。
示例1:
语法:for /r 目录 %%i in (元素集合) do 命令语句集合
如列举找到目标目录下所有:

for /r C:\target %%i in (*) do echo %%i

如列举找到目标目录下所有 .txt 文件:

for /r C:\target %%i in (*.txt) do echo %%i

For /d 命令语句

For 参数 /d 命令说明:列举出当前目录中的文件夹
示例:

for /d %%i in (C:\*) do echo %%i

这条命令会显示出 C盘下的文件夹,但不会显示文件夹里的文件和文件夹里的子文件夹。

For /l 命令语句

For 参数 /l 命令说明:计数循环
语法 for /l %%i in (x,y,z) do (....),在这个语句中,x y z 都只能取整数,正负皆可,x 代表起始值,y 代表增长,z 代表终止值,具体含义为:从 x 开始计数,以 y 为增长,直至最接近 z 的那个整数为止,这之间有多少个数,do 后面的语句就执行多少次。
语法要求:
实际上,xyz 的值可正可负,甚至为0(y 除外),限制非常宽松。

  1. 步长 y 的值不能为 0
  2. 当步长 y 的值为正整数时,终止值 z 不能小于初始值 x
  3. 当步长 y 的值为负整数的时候,终止值 z 不能大于初始值 x

示例 bat 文件:

@echo off
for /l %%i in (-1,2,5) do echo processed_once
pause

结果显示了 4 次,从-1到5步长2一共有 -1,1,3,5 四个数字,所以执行四次。

processed_once
processed_once
processed_once
processed_once
Press any key to continue . . .

For 命令语句变量

命令说明:

  1. ~i 删除任何(事实上不是任何)引号(" "),扩展 %i *
  2. %~fi%i 扩展到一个完全合格的路径名 *
  3. %~di 仅将 %i 扩展到一个驱动器号
  4. %~pi 仅将 %i 扩展到一个路径
  5. %~ni 仅将 %i 扩展到一个文件名 *
  6. %~xi 仅将 %i 扩展到一个文件扩展名
  7. %~si 扩展的路径只含有短名
  8. %~ai%i 扩展到文件的文件属性
  9. %~ti%i 扩展到文件的日期/时间
    10.~$PATH:I 查找列在路径环境变量的目录,并将 %I 扩展到找到的第一个完全合格的名称。如果环境变量名未被定义,或者没有找到文件,此组合键会扩展到空字符串

示例1 (for no.1):
我们有 txt 文本如下

"1111
"2222"
3333"
"4444"44
"55"55"55

bat文件如下:

@echo off
for /f %%i in (t.txt) do echo %%~i
pause

结果可以看到很多双引号 " " 被移除了,注意移除规律:
“1111 #字符串前的引号被删除
“2222” #字符串首尾的引号都被删除
3333” #字符串前无引号则后面的引号保留
"4444"44 #字符串前面的引号删除了,而中间的引号保留
"55"55"55 #字符串前面的引号删除了,而中间的引号保留

1111
2222
3333"
4444"44
55"55"55
Press any key to continue . . .

示例2 (for no.2):
显示C盘中所有的文件,文件夹(会显示完整的盘符和文件名)

for /f %%i in ('dir /b') do echo %%~fi

dir /b 是一个在Windows命令行(cmd)或批处理文件中使用的命令,用于显示目录中的文件和子目录的名称,但不显示其他信息,如文件大小、创建日期等。/b 参数代表“bare”或“basic”,意味着输出将仅包含文件名和目录名,没有任何额外的格式或信息。(如果想查看特定目录下的文件和子目录,可以这样做:dir /b C:\特定目录
所以只用 dir /b 的显示会类似:
在这里插入图片描述
使用 ~fi:
在这里插入图片描述
示例3 (for no.5):
~ni 只会显示文件名,并不显示路径

备注:
这个是自学 b 站up主 程序员血月做的笔记。原视频链接:
https://space.bilibili.com/327484473/channel/seriesdetail?sid=2069394
因本人水平有限,如有任何问题,欢迎大家批评指正!

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

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

相关文章

C++ STL在算法题中的常用语法

Vector 1.将vector<int>中的元素全部置换为0 fill(vec.begin(), vec.end(), 0); 2.vector容器是可以直接用比较是否值等的&#xff01; Unordered_set 1. unordered_set的删除&#xff08;count的值也会减少&#xff09; 2.unordered_map中的int默认值是0&#xff0c;…

Prometheus-v2.45.0+Grafana+邮件告警

目录 普罗米修斯监控架构介绍 Prometheus 监控架构 1. 数据抓取&#xff08;Scraping&#xff09; 2. 时序数据库&#xff08;TSDB&#xff09; 3. 数据模型 4. PromQL 查询语言 5. 告警&#xff08;Alerting&#xff09; 6. Alertmanager 7. 可视化&#xff08;Visu…

从0开始搭建vue + flask 旅游景点数据分析系统( 六):搭建后端flask框架

这一期开始开发header部分&#xff0c;预期实现两个目标&#xff1a; 创建 Flask 项目导入旅游数据后端实现旅游数据的查询 1 python 环境 & 开发环境 python 安装和pycharm安装需要去网上找包&#xff0c;建议python使用3.8 或者3.9版本 2 新建项目 我们新建一个文件…

Kafka详解以及常见kafka基本操作

1、 kafka 是什么,有什么作用 Kafka是一个开源的高吞吐量的分布式消息中间件&#xff0c;对比于缓冲和削峰&#xff1a;上游数据时有突发流量&#xff0c;下游可能扛不住&#xff0c;或者下游没有足够多的机器来保证冗余&#xff0c;kafka在中间可以起到一个缓冲的作用&#x…

Qt项目——文本编辑器(Bug/疑问)

项目地址&#xff1a;GitHub - Outlier9/CatEditor: Cat文本编辑器--Qt 有帮助的话各位点点 star 啦&#xff0c;感谢&#xff01; 如果有需要学习该项目的人&#xff0c;觉得看文档较为困难&#xff0c;可以加我联系方式&#xff0c;给github点个star后可免费提供学习视频&…

红酒与烹饪:美食的灵感之源

在烹饪的广阔天地中&#xff0c;红酒常常作为一道神秘的佐料&#xff0c;为菜肴带来别样的风味与深度。当定制红酒洒派红酒&#xff08;Bold & Generous&#xff09;与烹饪艺术相遇&#xff0c;一场美食的灵感之旅便悄然展开。 一、红酒与烹饪的浪漫邂逅 在烹饪的世界里&…

12月长沙学术会议:EI检索,机器人、自动化与智能控制方向

在春意盎然、生机勃勃的四月&#xff0c;全球科技界的目光聚焦于中国长沙&#xff0c;这里即将迎来一场科技与智慧碰撞的盛宴——第四届机器人、自动化与智能控制国际会议&#xff08;ICRAIC 2024&#xff09;。本次盛会由历史悠久、文化底蕴深厚的湖南第一师范学院荣耀主办&am…

正点原子imx6ull-mini-Linux驱动之platform设备驱动实验(14)

我们在前面几章编写的设备驱动都非常的简单&#xff0c;都是对IO进行最简单的读写操作像I2C、 SPI、LCD 等这些复杂外设的驱动就不能这么去写了&#xff0c;Linux 系统要考虑到驱动的可重用性&#xff0c;因此提出了驱动的分离与分层这样的软件思路&#xff0c;在这个思路下诞生…

QtQuick Text-文本样式

属性 Text项目的style属性可以设置文本的样式。 支持的文本样式有&#xff1a; Text.Normal&#xff08;默认&#xff09;Text.OutlineText.RaisedText.Sunken 示例 import QtQuickRow{spacing: 10padding: 10Text {font.pointSize: 40text: "Normal"}Text {font…

太阳光大约8分钟到达地球?太阳光:我一瞬间就到了!

我们常常听说,太阳光从太阳出发,需要8分钟才能抵达地球。这个时间听起来并不长,但它却是光子在宇宙空间中以惊人速度穿行的见证。 不过,这个8分钟的时间概念,实际上是站在我们地球观察者的角度来说的。如果我们换一个角度,比如说,从光子自己的视角来看待这段旅程,又会是…

2-53 基于matlab的15种图像纹理特征计算

基于matlab的15种图像纹理特征计算。纹理特征包括小梯度优势 T1、大梯度优势 T2、 灰度分布的不均匀性 T3、 梯度分布的不均匀性 T4 、能量 T5、灰度平均 T6、梯度平均 T7、灰度均方差 T8 、梯度均方差 T9、相关 T10 、灰度熵 T11、梯度熵 T12 、 混合熵 T13、惯性 T14 、 逆差…

字符专用输入输出函数 getchar() putchar()

文章目录 一、字符专用接收函数1.1 scanf实现字符接收1.2 字符专用接收函数getchar1.3 练习1.4 利用循环使字符接收函数接收字符串的元素 二、字符专用输出函数2.1 printf实现打印字符2.2 字符专用输出函数putchar 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例…

iOS 系统提供的媒体资源选择器(UIImagePickerController)

简介 图片或者视频的选择功能几乎是每个APP必不可少的&#xff0c;UIImagePickerController 是 iOS 系统提供的一个方便的媒体选择器&#xff0c;允许用户从照片库中选择图片或视频&#xff0c;或者使用相机拍摄新照片和视频。 它的页面简单易用&#xff0c;代码稳定可靠&…

基于STC8H系列单片机的比较器功能调试

基于STC8H系列单片机的比较器功能调试 STC8H4K64TL单片机介绍STC8H4K64TL单片机管脚图(48个引脚)STC8H4K64TL单片机串口仿真与串口通信STC8H4K64TL单片机管脚图(32个引脚)STC8H4K64TL单片机管脚图(20个引脚)STC8H系列单片机管脚说明STC8H系列单片机I/O口STC8H系列单片机I…

八股文真的有作用吗?

八股文在实际工作中的作用&#xff1a;助力、阻力还是空谈&#xff1f; 无论如何讨论&#xff0c;八股文都是面试中不可或缺的一环。一般来说&#xff0c;准入门槛是由“招聘”这个“游戏”的设计者设计的&#xff0c;旨在快速高效地筛选出合适的人选。 但是我还是要说&#x…

buu做题(12)

[CISCN 2019 初赛]Love Math <?php error_reporting(0); //听说你很喜欢数学&#xff0c;不知道你是否爱它胜过爱flag if(!isset($_GET[c])){show_source(__FILE__); }else{//例子 c20-1$content $_GET[c];if (strlen($content) > 80) {die("太长了不会算");…

【重磅推出】★全部CFA FRM CAIA ESG原創資料整理[2024版+2025版更新中]

【重磅推出】★全部CFA FRM原創資料整理[2024版2025版更新中] 申明&#xff1a;大部分資料都是本人整理原創內容&#xff0c;最新資料有參考CFA FRM協會&#xff08;有征求協會同意&#xff0c;是可以分享到網上給大家使用的&#xff09;&#xff0c; 去年收集整理了一個帖子&…

抖音小店新宠儿成都夏光汝网络科技

在当今这个数字化时代&#xff0c;电商平台的兴起为无数商家和个人创业者提供了前所未有的机遇&#xff0c;而抖音小店作为抖音平台上的重要电商板块&#xff0c;更是以其庞大的用户基数和高度活跃的社交属性&#xff0c;成为了众多品牌与商家争相入驻的热门选择。其中&#xf…

理学、工学、农学、医学、哲学、经济学、法学、教育学、文学、军事学、管理学、艺术学、历史学等学科的核心思想和基本理论

以下是以表格形式列出的理学、工学、农学、医学、哲学、经济学、法学、教育学、文学、军事学、管理学、艺术学、历史学等学科的核心思想和基本理论&#xff1a; 晓北斗推荐-多学科知识体系 学科核心思想基本理论理学探索自然、社会和人类思维的本质和规律物理学、化学、生物学、…

Flink 实时数仓(四)【DWD 层搭建(二)流量域事实表】

前言 昨天刚搬到新校区&#xff0c;新校区小的可怜&#xff0c;好在之后出去实习交通可以方便点&#xff1b;待在学院太受限了&#xff0c;早点离开&#xff01; 今天开始完成 DWD 层剩余的需求&#xff0c;上一节我们把日志数据根据不同类型分流写入到了不同的主题&#xff1b…