批处理学习教程(4)------for的用法

2023-11-19

循环 for

1. 如果批处理不具备批量处理的功能,那么它就徒有虚名了。而命令 for ,在某种意义上彻底体现出了批处理的强大快捷省事批量的作用。在看过 for/? 后,可以归纳出 for 大致可以分三种常用的类型(或者叫使用方法)。从针对的循环目标来看,它们分别是针对于文件、数字、以及文字。

2. for %i in (*.*) do @echo %i 。这就是 for 的一般使用格式。注意到其中的浅靛色文字 for 、in 和 do ,是 for 的固定用法。其内容可以理解为:在某一范围内(in),对于其中的某一文件来说(for),做如下的处理(do)。而 for %i in (*.*) do @echo %i 就是在当前工作目录的所有文件中(in (*.*)),对于其中的某一文件(for %i),做出显示其名称的处理(do @echo %i)。变量 i 仅在当前循环语句 for 里起作用,%i 表示其值。

注意:以上是直接在命令提示符里以命令的形式表达出来的写法;在批处理文件中应使用双百分号 %% 代替单百分比号 % ,就像:%%i。

批量修改文件名是其比较有用的典例之一。看看下面的批处理

:::::::批量修改文件名.bat:::::::

@echo off

setlocal EnableDelayedExpansion

set /a num=1

for %%i in (D:\test\*.txt) do (

ren "%%i" !num!.txt

set /a num+=1

)

::::::::::::::::::::::::::::::::

使用了 setlocal EnableDelayedExpansion 后,可以让 for 或 if 后面的执行语句中变量的值随其变化而不断更新(所以后面使用了 !num! 而不是 %num%)。整个批处理的处理过程就是对 D:\test\*.txt 中的所有文本文件进行批量改名,文件名从 1.txt 开始依次为 2.txt 、3.txt ……。

注意:请确保循环语句 in 路径中的文件不是重要的文件,因为改名后将无法使用撤消,如果像我一样不小心把重要文件误改名的话就又要 orz 了一次。

以上批处理是固定了文件的路径以及文件后缀名。为了增加该批处理的功能,我们可以让用户自己选择要进行改名的文件所在路径,以及选择所进行文件修改的后缀名。当然,有些朋友还希望有给文件批量加上前缀(比如:前缀1.txt 前缀2.txt 等等)。(关于 批量改文件名.bat 在第六章中还有进一步的修改)

::::::::批量改文件名.bat::::::::

@echo off

setlocal EnableDelayedExpansion

set /p zpath=请输入目标文件所在的路径:

set /p prefix=请输入文件名前缀(不能包含以下字符\/:*?"<>|):

set /p ext=请输入文件的扩展名(例如 .txt):

set /a num=1

for %%i in (%zpath%\*%ext%) do (

ren "%%i" "%prefix%!num!.%ext%"

set /a num+=1

)

::::::::::::::::::::::::::::::::

3.也许大家注意到了,上面 for 的用法仅仅是针对多个文件来进行循环重复操作的。如果想对一系列有规律的数字进行循环,或是在一定的次数内对某个操作进行循环重复的执行,使用 for 也能够实现。/l 是可以跟在 for 后面的重要参数之一。比如:for /l %i in (5,3,16) do echo %i ,可以让数值型的变量 i 依次成为:5、8、11、14 。正如 in 里所描述的规律 (5,3,16) 一样,从 5 开始,每次增加 3 ,直到 16为止。同样,我们还可以试一下 for /l %i in (19,-4,3) do echo %i ,这次 i 是递减的规律。很明显,结果将依次显示为:19、15、11、7、3 。

 

::::::::::圆圈方阵.bat::::::::::

@echo off

setlocal EnableDelayedExpansion

 

set var=○

for /l %%i in (1,1,7) do set var=%var%!var!

:: 此时变量 var 已经变成一行连续的8个圆圈了

 

for /l %%i in (1,1,8) do (

echo 这是第 %%i 份>输出结果%%i.txt

for /l %%j in (1,1,8) do echo %var%>>输出结果%%i.txt

)

echo 8 X 8 的 ○ 矩阵已经画好,并保存到8份文本文件里了

pause

::::::::::::::::::::::::::::::::

注意:%%i ,在批处理文件中需要用连续的两个百分号 %% 来描述循环变量 i ,而不是一个。

注意:i 与 j ,在循环里面再套循环时,前一个循环变量 i 在没有释放之前,不应该让第二个循环变量的名称与 i 重复。

 

4.for 也可以对指定范围内的文字进行循。for 后面跟参数 /f ,/f 后面跟选项,所指定的范围 in 里可以是一个文件里的文字,可以是一个字符串,也可以是一条命令的输出结果。我们首先以一个文件里的文字作为循环对象,循环时,每一行将被循环一次。

::::::::::文字筛选.txt::::::::::

@echo off

echo 测试 文字筛选.txt 里每一行的首单词

for /f %%i in (文字筛选.txt) do echo %%i

pause

 

echo.

echo skip=2 表示前两行被跳过

for /f "skip=2" %%i in (文字筛选.txt) do echo %%i

pause

 

echo.

echo tokens=2,4-6 表示提取每行的第2个、以及第4到6个单词

for /f "skip=2 tokens=2,4-6" %%i in (文字筛选.txt) do echo %%i, %%j, %%k, %%l.

pause

 

echo.

echo eol=N 表示当此行的首字母为 N 时,就忽略该行

for /f "eol=N skip=2 tokens=2,4-6" %%i in (文字筛选.txt) do echo %%i, %%j, %%k, %%l.

pause

 

echo.

echo delims=e 表示不再以空格区分每个词,而是以字母 e 作为间隔

for /f "eol=N skip=2 tokens=2,4-6 delims=e" %%i in (文字筛选.txt) do echo %%i, %%j, %%k, %%l.

pause

 

echo.

echo usebackq 表示双引号里的东西是文件名而不是字符串

for /f "usebackq eol=N skip=2 tokens=2,4-6 delims=e" %%i in ("文字筛选.txt") do echo %%i, %%j, %%k, %%l.

pause

::::::::::::::::::::::::::::::::

作为测试,可以在上述批处理文件的同一路径下创建一个用于测试的文本文件 文字筛选.txt ,其内容为:

Hello there!

This text is an example of test for the batch file 文字筛选.bat.

Notice the first letter in this line, N.

If the eol charactor was set to be letter N.

The third line will not be considered by the batch.

 

5. ESCAPE字符 % ,通常被译为转义字符,但也有更形象的译名脱逸字符、逃逸字符等。也就是说 % 不仅仅将与其相关的特定字符串转义并替换为特定字符串,而且自身也会被“脱逸”。而且类似于C语言中的转义字符 \ ,双%会转义并脱逸为单百分号 % ,四%则脱为双百分号 %% 。[3]

 

注意下面这个批处理中的双百分号 %% 的用法

::::::::::::::::::::::::::::::::

@echo off

set Text=Hello world!

for /l %%i IN (0,1,11) do call echo %%Text:~%%i,1%%

pause

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

批处理学习教程(4)------for的用法 的相关文章

  • VS Code For Web 深入浅出 -- 进程间通信篇

    在上一篇中 xff0c 我们一起分析了 VS Code 整体的代码架构 xff0c 了解了 VS Code 是由前后端分离的方式开发的 且无论前端是基于 electron 还是 web xff0c 后端是本地还是云端 xff0c 其调用方式
  • 常用bat代码

    清除空文件夹 清理空文件夹 删除空文件夹 64 echo off for f 34 tokens 61 34 i in 39 dir s b ad sort r 39 do rd 34 i 34
  • Renesas CS+ for ca cx入门(一)

    这是一篇关于Renesas的CS 43 for ca xff08 以下简称CA xff09 的入门简介 xff0c 在网上关于这个IDE的使用方法比较少人讲述 xff0c 兴许使用的人比较少吧 另一个类似的IDE是CS 43 for cc
  • MPLAB构建项目报错“recipe for target ‘.build-conf‘ failed”

    recipe for target build conf failed 刚入门单片机 xff0c 在写程序时 xff0c 当时写完 xff0c build成功 xff0c 但是第二天过来 xff0c 改写了部分代码 xff0c 然后去bui
  • v-if和v-for的优先级

    文章目录 vue2vue3 vue2 v for优先级比v if高v for与v if作用在不同标签时候 xff0c 是先进行判断 xff0c 再进行列表的渲染 注意事项 永远不要把 v if 和 v for 同时用在同一个元素上 xff0
  • Online Trajectory Generation of a MAV for Chasing a Moving Target in 3D Dense Environments

    微型无人机的在线轨迹生成 xff0c 用于在3D密集环境中追踪运动目标 摘要一 介绍二 相关工作A 在障碍物环境中追逐B 通过预先规划安全地生成轨迹 三 问题陈述A 问题设置B 能力C 命名 IV 视点生成A 可见度指标B 具有安全性和可见
  • java 优化双重for循环

    首先我们要有两个对象分别是 学生信息 和 学生住宿信息 span class token keyword class span span class token class name Student span span class toke
  • Beam技术

    一 简介 在大数据处理中 流计算技术包括Storm Spark Streaming和Flink 实际应用中还包括Storm Trident Samura以及Google MillWhell和亚马逊的Kinesis等技术 离线处理基本上都基于
  • for input string:原因及其解决方案

    javascript view plain copy 首先我这里遇到的错误 for input String if 类型 money Double parseDouble 数据库中获取的内容 else if 类型 number Intege
  • Bat批处理生成带随机数的毫秒时间戳验证码

    second bat echo off set temp Spring gt Echo WScript Echo new Date getTime for f a in cscript nologo e jscript do set tim
  • Mysql存储过程(批量处理)如何编写

    1 什么事存储过程 存储过程是一组为了完成特定功能的SQL语句集合 一个存储过程是一个可编程的函数 它在数据库中创建并保存 一般由SQL语句和一些特殊的控制结构组成 使用存储过程不仅可以提高数据库的访问效率 同时也可以提高数据库使用的安全性
  • 在cmd/bat脚本中获取当前脚本文件所在目录

    Q 在Win7 Win10中以管理员身份运行在cmd bat脚本时 如何获取当前脚本文件所在目录 当我们在Win7 Win10中使用鼠标右键的 以管理员身份运行 以管理员身份运行cmd bat脚本时 系统默认进入的目录是C Windows
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别

    文章目录 前言 变量对比 0 i i var var var 总结 前言 最近使用批处理程序处理文件的时候 发现这 bat中的变量形式真是 变化多端 有时候加1个百分号 有时候加2个百分号 还有的时候加感叹号 真是让初学者一头雾水 于是查询
  • 如何批量快速提取复制文件夹里所有文件夹名和文件名(包括所有子文件里的所有文件夹名和文件名)详细步骤

    推荐阅读 Windows 批处理 bat 语法大全 BAT批处理基本命令总结 南北极之间的博客 CSDN博客 windowsbat命令Windows 批处理 bat 语法大全 BAT批处理基本命令总结https blog csdn net
  • 教妹学Java(十五):for循环详解

    你好呀 我是沉默王二 一枚颜值与才华俱在的程序员 本篇教程通过我和三妹对话的形式来谈一谈 for while do while 循环之间的差别 以及重点介绍一下 for 循环 while do while 会在接下来的教程中单独介绍 教妹学
  • bat 将指令执行结果赋给变量

    linux shell脚本将指令执行结果赋值给变量很容易 比如 bin bash file name ls wc l echo file name file list ls l awk print 1 NF echo file list 很
  • 第二节 分支和循环语句

    第二节 分支和循环语句 目录 一 什么是语句 二 分支语句 选择结构 三 循环语句 本章重点 分支语句 if switch 循环语句 while for do while goto语句 一 什么是语句 C语句可分为以下五类 表达式语句 函数
  • 腾讯/阿里/百度 BAT人才体系的职位层级、薪酬、晋升标准

    互联网圈有这么一句话 百度的技术 阿里的运营 腾讯的产品 那么代表互联网三座大山的BAT 内部人才体系有什么区别呢 今天智小培就带领大家看一看 腾讯 1 职级 腾讯职级体系分6级 最低1级 最高6级 同时按照岗位又划分为四大通道 内部也叫
  • 在WINDOW 系统下如何用批处理命令生成代码

    如图要实现一个每次编译都会自动重新生成的代码 一般是 软件版本相关的代码最适合这种自动生成 上图中需在用到编译时间和日期 来直接上代码 BEGIN COLOR 07 cls echo off ECHO ECHO 自动生成软件版本号 ECHO
  • 批处理学习教程(4)------for的用法

    循环 for 1 如果批处理不具备批量处理的功能 那么它就徒有虚名了 而命令 for 在某种意义上彻底体现出了批处理的强大快捷省事批量的作用 在看过 for 后 可以归纳出 for 大致可以分三种常用的类型 或者叫使用方法 从针对的循环目标

随机推荐

  • matlab 改变图片的长宽,Matlab怎么调整图片的大小,使它成为特定的长宽

    满意答案 whymhm 推荐于 2017 12 15 采纳率 53 等级 6 已帮助 2557人 一般而言 只需对目标图像进行图形句柄对象和坐标轴句柄对象进行操作即可 MATLAB中分别用gcf和gca表示 如 set gcf unit c
  • 转载:Beginning WF 4.0翻译——第一章(创建一个简单的工作流)续二

    关于工作流设计器 即使是很简单的工作流设计 你可能都很难去观看整个工作流图形 幸运的是 设计器有一些非常有用的工具区帮助我们在一个大的工作流上去工作 在设计器的右上角 点击Collapse 收缩 链接 工作流图会如图Figure1 20所示
  • C语言编写图形界面

    文章目录 环境 配置环境 使用库 基础概念 句柄 程序的入口 创建窗口 定义窗口类 注册窗口类 创建窗口 完整代码 运行效果 环境 使用的是VSCode MinGW 配置环境 VSCode写C语言的环境就不讲了 就说一下本篇文章编译的条件吧
  • 复习Ajax

    ajax简介 ajax全称为Asynchronous JavaScript And XML 就是异步的js和XML ajax不是一个新的编程语言 而是一种将现有的技术组合在一起使用的新方式 ajax特点 通过ajax可以在浏览器中向服务器发
  • ubuntu CMake中的set指令详解

    遇到一个CmakeList txt里面出现的一行 SET WORKSPACE DIR ENV HOME workspace 不知道这个 ENV HOME 到底指的什么路径 查阅了一些资料 也没能理解 只知道是cmake文件独有的路径赋值方式
  • mysql中or详细使用方式(Mysql之and和or混合使用) MES

    mysql中or详细使用方式 Mysql之and和or混合使用 在mysql中 经常会遇到这样的情况 在写条件语句where时 可能会同时有多个条件的 或 或者 与 但经常会达不到效果 经百度 本人发现一个where语句中同时出现条件的 与
  • 两台电脑通过网线共享文件

    参考博客 https blog csdn net qq 38161654 article details 80865241 谢谢 1 用一根网线把两台电脑连接起来 2 关闭两台电脑的防火墙 具体操作如下 Windows Defender 防
  • 华为OD机试 Java 实现【扑克牌大小】【牛客练习题 HJ88】,附详细解题思路

    一 题目描述 扑克牌游戏大家应该都比较熟悉了 一副牌由54张组成 含3 A 2各4张 小王1张 大王1张 牌面从小到大用如下字符和字符串表示 其中 小写joker表示小王 大写JOKER表示大王 3 4 5 6 7 8 9 10 J Q K
  • pytorch 卸载_windows安装cuda和cudnn以及pytorch+卸载

    查看cuda版本号 1 首先需要进入pytorch官网查看一下需要安装的pytorch版本适配的cuda版本号 网址如下所示 PyTorch pytorch org 如图所示 官网默认显示最新版本的PyTorch 点击下面的链接 可以安装一
  • HIT-ICS2022大作业(程序人生-Hello’s P2P)

    计算机系统 大作业 题 目 程序人生 Hello s P2P 专 业 计算机科学与技术 学 号 班 级 学 生 指 导 教 师 计算机科学与技术学院 2022年5月 摘 要 一个简单的Hello程序 其生命周期的整个P2P与020过程需要计
  • 阿里云,腾讯云,翼讯云等新买服务器磁盘不显示,挂载磁盘

    新买了一台翼讯的云主机 200G的硬盘 连接以后df h 查看磁盘只有系统盘 这时可以fdisk l 查看所有磁盘 这时应该进行磁盘三部曲 分区 格式化 挂载 分区 fdisk dev xvdb 这里的操作只分一个区 按n 按p 按1 按回
  • 剑指offer40

    class Solution public void FindNumsAppearOnce vector
  • 单片机编程:软件定时器

    单片机软件在没有RTOS的情况下 可使用 软件定时器 Timer 它的作用类似OS的线程 从而大大简化程序设计 提高代码质量 软件定时器 设置函数的基本参数 定时时长 回调函数 指针 序号 内容 1 定时时长 interval ms 2 回
  • MCMC抽样算法要点总结

    MCMC抽样算法 目的 给定一个已知的概率分布函数 p x 对随机变量 x 进行采样 使其满足 p x 概率分布 原理 一个马尔科夫链 对应的概率转移矩阵为 P 如果其具有 非周期性 且任意两个状态之间都是 连通 的 则不论初始的状态概率分
  • 1000以内的所有回文数

    02 程序的版权和版本声明部分 03 Copyright c 2013 烟台大学计算机学院 04 All rights reserved 05 文件名称 test cpp 06 作 者 马德鹏 07 完成日期 2013 年11月18日 08
  • JavaWebSSM-购物商城系统(idea可用)

    软件工程课程设计 毕业设计之购物商城系统代码 基于javaSSM的购物商城系统 基于Thymeleaf的商品销售平台代码 前言 本次文章主要是介绍蛋糕商城系统的功能 系统分为两个角色 管理员 用户 一 系统功能 1 1 开发环境 开发语言
  • STM32 用cubemx移植IAP功能,实现串口升级

    感谢网上的大神 通过你们的文章我终于测试iap升级通过了 具体iap功能我白嫖一段 程序上电先进入 bootloader代码功能 后面通过bootloader跳转到用户的功能代码中 使用的开发板芯片 STM32F103VET6 串口1升级
  • 手动更新(rpi-update)树莓派固件

    手动更新 rpi update 树莓派固件 1 下载固件 本地更新 先在 PC 上下载固件 也可以用如下方法下载 curl L https github com Hexxeh rpi firmware archive master tar
  • Pipes【Codeforces 1234 C】【思维】

    Codeforces Round 590 Div 3 C 此题无坑 自己挖坑 本来比赛中应该A的代码 就因为我在N 1的时候加了一组特判 然后一直就WA2 后来发现Test 2是强数据 而我一直在怀疑我的思维错了 就一直没交了 最后这道14
  • 批处理学习教程(4)------for的用法

    循环 for 1 如果批处理不具备批量处理的功能 那么它就徒有虚名了 而命令 for 在某种意义上彻底体现出了批处理的强大快捷省事批量的作用 在看过 for 后 可以归纳出 for 大致可以分三种常用的类型 或者叫使用方法 从针对的循环目标