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

news2024/12/23 10:14:30

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

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

FOR 命令语句

在批处理中,for 是最为强大的命令语句,它的出现,使得解析文本内容、遍历文件路径、数值递增/减等操作更加简单,配合 ifcallgoto 等流程控制语句,更是可以实现脚本复杂的自动化、智能化操作。
例子:
bat 文件

for %%i in (a,b,c,d,e) do @echo %%i
pause

结果:

C:\Users\rwq119\Desktop\test>for %i in (a b c d e) do @echo %i
a
b
c
d
e

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

For 语句的基本要素都有:
(1) forindofor 语句的关键字,它们三个缺一不可
(2)in 之后, do 之前的括号不能省略
(3) %%ifor 语句中对定义变量 (定义变量 i) 的引用,就算它在 do 后面的语句中没有参与语句的执行,也是必须出现的。
但注意,在 cmd 里直接输入 for %%i in (a,b,c,d,e) do @echo %%i 是运行不了的。因为 for 循环的语法,在命令行(cmd 窗口)中直接输入时,应该使用单个百分号 % 来引用变量(即:for %i in (a,b,c,d,e) do @echo %i),而在批处理文件(.bat)中,应该使用双百分号 %%。这种差异主要是因为命令行和批处理文件的解析方式不同。在批处理文件中,% 字符是一个特殊的字符,用于变量替换,所以在批处理文件中引用循环变量时,需要用 %% 来避免与批处理文件的变量解析机制冲突。
(4)command1 表示字符串或变量,command2 表示字符串、变量或命令语句:DO command1 [command2]

For /f delims 命令

For /F 参数 命令语句,参数 /f 命令说明:读取文件内容;提取某几行字符;截取某个字符片段;对提取到的内容再切分、分割、等等…… for /f 就是被设计成专门用于解析文本的。
示例:
我们有以下文本文档(t.txt 文件)

a
a,
a
12,34
sa
fv`,
f/'v,45
'.,[.'/

使用以下 bat 文件读取文本文档的内容

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

结果会按行迭代,一行一行的打印出来:

C:\Users\rwq119\Desktop\test>for /F %i in (t.txt) do @echo %i
a
a,
a
12,34
sa
fv`,
f/'v,45
'.,[.'/

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

参数 delims= 是分割符,分割符后面的内容不要,比如逗号分割: for /f "delims=," %%i in (xxx.txt) do echo %%i
示例,我们还用上面的 t.txt,更改下 bat 文档

for /f "delims=,"  %%i in (t.txt) do @echo %%i
pause

结果依然是按行迭代,结果一行一行打印出来,但是行内如果有 ,,那之后的文本就会被分割掉。如果行内没有 , 那么这一行都会被打印,比如第一行的 a:

C:\Users\rwq119\Desktop\test>for /F "delims=," %i in (t.txt) do @echo %i
a
a
a
12
sa
fv`
f/'v
'.

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

For /f tokens 命令

命令说明:定点提取 tokens=
示例1, 我们有下面的 txt 文件:

1,2,3,4,5,6

bat 代码:

for /f "delims=, tokens=3"  %%i in (t.txt) do @echo %%i
pause

结果就是提取了以 , 分割的第三个字符(tokens= 可以用于指定提取哪一个)

C:\Users\rwq119\Desktop\test>for /F "delims=, tokens=3" %i in (t.txt) do @echo %i
3

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

示例2,依然是上面的 txt 文件:

for /f "delims=, tokens=1,3,6"  %%i in (t.txt) do @echo %%i %%j %%k
pause

我们可以看到依次提取出了 第 1,3,6个值。这里注意,我们定义变量 %%i,后面 do 里面调用就要连着使用,第二个变量(提取的原文档逗号分隔后的第三个值)用 %j,第三个变量(提取的原文档逗号分隔后的第6个值)用 %k, 即 i,j,k 要连着。如果我们定义变量 %%a 那么就要用 %%b %%c

C:\Users\rwq119\Desktop\test>for /F "delims=, tokens=1,3,6" %i in (t.txt) do @echo %i %j %k
1 3 6

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

示例3,依然是上面的 txt 文件:

for /f "delims=, tokens=3,*"  %%i in (t.txt) do @echo %%i %%j
pause

结果我们可以打印第三个,以及第三个后面所有的。这里 * 在 bat 文件中用法就是代表所有,%%j 就是对应的 *

C:\Users\rwq119\Desktop\test>for /F "delims=, tokens=3,*" %i in (t.txt) do @echo %i %j
3 4,5,6

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

示例4,我们有新文本 txt 文件:

a,
a
a,b
ab
1,2,3
1,2,3,4,5,6
a1,a2,a3,a4,a5,a6,a7

bat 文件:

for /f "delims=, tokens=2,3,*"  %%i in (t.txt) do @echo %%i %%j %%k
pause

结果,会对每行进行分割提取操作,打印出符合要求的变量。第一二四行以逗号分割后没有第二个值,什么也不会打印(打印空);第三行逗号分割后有第二个值,会被打印出来 b;第五行逗号分隔后会有第二个值 2 和第三个值 3 会被打印出来;第六七行对应的 %%i%%j%%k 都有,会被依次打印出来。

C:\Users\rwq119\Desktop\test>for /F "delims=, tokens=2,3,*" %i in (t.txt) do @echo %i %j %k
b
2 3
2 3 4,5,6
a2 a3 a4,a5,a6,a7

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

For /f skip 命令

命令说明:跳过文本内容(行) skip=
示例,这里我们用到的还是上文 tokens 命令的示例的 txt。
批处理文本:

for /f "skip=5"  %%i in (t.txt) do @echo %%i
pause

输出的结果会跳过前面5行:

C:\Users\rwq119\Desktop\test>for /F "skip=5" %i in (t.txt) do @echo %i
1,2,3,4,5,6
a1,a2,a3,a4,a5,a6,a7

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

批处理文本:

for /f "skip=1" %%i in (t.txt) do @echo %%i
pause

输出结果跳过第一行:

C:\Users\rwq119\Desktop\test>for /F "skip=1" %i in (t.txt) do @echo %i
a
a,b
ab
1,2,3
1,2,3,4,5,6
a1,a2,a3,a4,a5,a6,a7

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

For /f eol 命令

命令说明:忽略指定字符的文本内容(指定字符需要在文本首部)eol=
示例,我们有文本文档 txt 文件

a,
,a
(a,b
,ab
:1,2,
;3

bat 文件

REM for /f %%i "eol=," in (t.txt) do @echo %%i 无法运行,参数要在定义变量 %%i 之前。对于其他参数应该也是
for /f "eol=," %%i  in (t.txt) do @echo %%i
pause

结果,行首是 , 的行都会被忽略掉

a,
(a,b
:1,2,
;3

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

注意当我们不定义 eol= 参数的时候,行首是 ; 分号的行都会默认被忽略掉
bat 文件:

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

结果,我们虽然没有定义 eol=; 但是,分号开头的行都会被忽略。

C:\Users\rwq119\Desktop\test>for /F %i in (t.txt) do @echo %i
a,
,a
(a,b
,ab
:1,2,

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

但是我们一旦定义了 eol=参数,如上面定义了 eol=, 就只会忽略 , 开头的行,; 开头的行也被打印。

For /f usebackq 命令

命令说明:增强型命令参数 usebackq
首先我们复习一下 for 语句参数 f 这个命令的使用格式
(1)for /f %%i in (文件名) do (......)
(2)for /f %%i in ('命令语句') do (......)[' ' 单引号]
(3)for /f %%i in ("字符串") do (......) [" " 双引号]
REM for /f %%i in (...) do echo %%i
(1)在之前的示例中已经示范过了,(2)命令语句加单引号 ' ' 的示例:
osk 命令是打开虚拟键盘
批处理文件:

for /f %%i in (osk) do @echo %%i
for /f %%i in ('osk') do @echo %%i
pause

运行后结果,第一行命令没有 单引号 ' ' 是会报错的,系统找不到这个文件。第二行命令打开了虚拟键盘。
在这里插入图片描述
对于(3)字符串加双引号 " " 的示例:

for /f %%i in ("osk") do @echo %%i
pause

输出结果,"osk" 被当作字符串打印出来

C:\Users\rwq119\Desktop\test>for /F %i in ("osk") do @echo %i
osk

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

我们再介绍增强型命令参数 usebackq
语法:
(1)for /f "usebackq" %%i in ("文件名") do (.......)
(2)for /f "usebackq" %%i in (`命令语句`) do (.......) 注意这里用的是反单引号(反引号 (`xxx`))
(3)for /f "usebackq" %%i in (‘字符串’) do (.......)

区别于前面普通情况下文件名没有引号 (xxx),命令语句单引号 ('xxx'),字符串双引号 ("xxx")usebackq 的使用文件名要加双引号 ("xxx"),命令语句要加反引号 (`xxx`),字符串加单引号 ('xxx')
对于(1)使用 usebackq,可以读取名字里带有空格的文件名 比如 for /f "usebackq" %%i in ("文件名 有空格.txt") do (.......)

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

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

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

相关文章

Python数值计算(18)——三次样条曲线概述

1. 概述 前面介绍到了多种插值方法,但是这些插值方法都无法避免龙格现象,即高阶多项式可能存在剧烈的振动,而且在区间的一个点处的微小扰动,都可能引起整个范围内的巨大振动,一种替代方式是使用类似线性插值的方式&am…

Python进阶 JSON数据,pyecharts制图

目录 json数据格式的转换 什么是json json本质 注意 pyecharts快速入门 画一个最简单的折线图 使用全局配置选项优化折线图 总结 json数据格式的转换 什么是json 一种轻量级的数据交换格式,可以按json指定的格式去组织和封装数据 json本质 带有特定格式的…

OpenSPG安装部署

文章目录 前言一、安装前准备安装docker安装docker compose 二、安装服务端下载 docker-compose.yml 文件启动服务端 三、安装客户端拉取镜像克隆OpenSPG源码 案例 前言 OpenSPG是以SPG框架为基础设计和实现的知识图谱开放引擎,它为领域图谱构建提供了明确的语义表…

数据结构1绪论

一、数据结构的绪论的思维导图 二、数据 1.数据是描述客观存在事务的符号,其能被计算机识别,处理。 数据不仅仅是整型,实型等数值类型,还包括声音,视频,图像等。 三、数据元素 1.数据元素是组成数据的有…

PTA—基础编程题目集(7-20)

7-20 打印九九口诀表 目录 题目描述 输入格式: 输出格式: 输入样例: 输出样例: 参考代码 总结 题目描述 下面是一个完整的下三角九九口诀表: 1*11 1*22 2*24 1*33 2*36 3*39 1*44 2*48 …

js基础-作用域与作用域链

什么是作用域? 简单说就是在代码中定义的变量或者函数能起作用的范围 什么是作用域链? 简单说就是JavaScript 在执行时查找变量的过程,它按照从当前作用域到全局作用域的顺序逐层向上搜索,直到找到变量或到达作用域的顶…

C#进阶-轻量级ORM框架Dapper的使用教程与原理详解

本文详细介绍了Dapper在C#中的使用方法,包括Dapper的基本概念、与其他持久层框架的比较、基本语法和高级语法的使用,并通过实例讲解了如何在项目中集成和使用Dapper。Dapper以其高效的性能和简洁的API受到开发者的青睐,适用于各种数据库操作需…

基于环形拓扑的多目标粒子群优化算法(MO_Ring_PSO_SCD)求解无人机三维路径规划(MATLAB代码)

一、无人机多目标优化模型 无人机三维路径规划是无人机在执行任务过程中的非常关键的环节,无人机三维路径规划的主要目的是在满足任务需求和自主飞行约束的基础上,计算出发点和目标点之间的最佳航路。 1.1路径成本 无人机三维路径规划的首要目标是寻找…

怎么智能化管理公司众多电脑?公司电脑太多怎么管控!智慧运维,精准管控的它来啦!

俗语称:“团结则强,分散则弱;集腋成裘,聚沙成塔。” 面对公司里如繁星般的电脑大军,你是否曾感到管理无力,仿佛在与一群“不羁的野马”较劲?别担心,智慧运维的浪潮已经席卷而来&…

Mybatis学习(3)

目录 一、JDBC vs Mybatis 二、Mybatis Plugin 三、Dao接口和xml文件的sql如何建立关联 四、Mybatis如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式? 五、动态SQL 六、一级缓存和二级缓存 七、接口绑定的实现 八、Mybatis vs Hiberna…

Mybatis的注解开发学习笔记

学习视频:5001 Select注解_哔哩哔哩_bilibili~5009 案例:基于MyBatis注解的学生管理程序_哔哩哔哩_bilibili 目录 1.基于注解的单表增删改查 1.1Select注解 1.2Insert注解 1.3Update注解 1.4Delete注解 1.5Param注解 2.基于注解的关联查询 2.1一对一查询 2.2…

[Meachines] [Easy] nibbles Nibbleblog-Upload

信息收集 IP AddressOpening Ports10.10.10.75TCP:22,80 $ nmap -p- 10.10.10.75 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 2048 c4:f8:ad:e8:f8:04:…

实践致知第17享:电脑忽然黑屏的常见原因及处理方法

一、背景需求 小姑电话说:最近,电脑忽然就黑屏了(如下图所示),但是等待几十秒甚至一分钟,电脑就能自然恢复了,这种状况一天能出现三四次,怎么办? 二、分析诊断 电脑黑屏…

C++从入门到起飞之——string类用法 全方位剖析!

🌈个人主页:秋风起,再归来~🔥系列专栏:C从入门到起飞 🔖克心守己,律己则安 目录 1. 为什么学习string类? 1.1 C语言中的字符串 1.2 两个面试题(先不做讲解) 2. 标准库中…

IMYAI智能助手介绍:全能AI工具箱,AI爱好者AIGC系统的首选。

IMYAI系统官方网站:https://new.imyai.top 引言: IMYAI系统是一款集多种先进AI技术于一身的创作工具箱,为用户提供无限的创作可能。不论您是想创作精彩的文章,还是创作精美的绘画作品,IMYAI系统都能满足您的需求。它集…

不想要反馈的错误遮挡页面,,想让它在控制台提示

开始页面是这样的 然后在vue.config.js 中修改 devServer: {client: {//当出现编译错误或警告时,在浏览器中是否显示全屏覆盖。 示例为只显示错误信息overlay: {runtimeErrors: false,},},},然后关闭服务,重新运行项目。 结果

【Netty】netty启动流程源码解析

文章目录 Netty整体架构一个启动流程源码解析new NioEventLoopGroup(1)构建线程池基础信息构建线程选择策略 groupchannelhandlerchildHandlerbindinitAndRegister反射创建 NioServerSocketChannel 对象init 注册channeldoBind0 流程图思考 Netty整体架构 是什么: N…

【学习方法】高效学习因素 ① ( 开始学习 | 高效学习因素五大因素 | 高效学习公式 - 学习效果 = 时间 x 注意力 x 精力 x 目标 x 策略 )

文章目录 一、高效学习因素1、开始学习2、高效学习因素五大因素3、高效学习公式 - 学习效果 时间 x 注意力 x 精力 x 目标 x 策略 一、高效学习因素 1、开始学习 对于 学习差 , 调皮捣蛋 的学生 , 不要把 学习成绩差 的 原因 归因为 不爱学习 / 没有学习方法 , 可能是 还没有 …

Docker-学习笔记(借助宝塔面板)

ubuntu环境 一、安装 可以参考官网进行或其他博客进行安装 1.进入宝塔面板 进图Docker菜单,查看是否提示安装。 2.查看是否安装 查看版本 docker -v 证明已经安装 二、常用命令 1.查看版本 docker -v 2.启动、停止、重启docker systemctl start docker…

windows C++-通过 C++/WinRT 使用 API(一)

本文介绍如何使用 C/WinRT API,无论它们是 Windows 的一部分、由第三方组件供应商或自行实现。 本文中的代码示例较短,并且很容易试验,可以通过创建新的 Windows 控制台应用程序 (C/WinRT) 项目和复制粘贴代码来重现它们。 但是,…