【批处理DOS-CMD命令-汇总和小结】-变量嵌套和命令嵌套

2023-11-14

参考来源:

DOS:变量嵌套和命令嵌套 - 阿飞同学 - 博客园

bat脚本的基本命令语法 - 整合侠 - 博客园 

一、什么是变量嵌套、命令嵌套?

1.1 介绍一下字符串截取的知识

对于字符串变量A,要截取它的片段,语法是【A1=%A:~m,n%】。

例如对于字符串变量A=reurabgrien,执行命令【set A1=%A:~3,2%】后,A1就等于【ra】。

当m和n都是正数时,m指向起始字符(也可以理解成从默认的第0个字符偏移的值),n是截取的字符数量(默认是截取全部)。

1.2 什么是变量嵌套和命令嵌套?

上面讲的【%A:~m,n%】是字符串截取的基本形式,m和n是用常量去表示的,那么它们可不可以用变量去表示呢?也即实现「变量嵌套」呢?

答案是可以的,「变量嵌套」需要用到「命令嵌套」才能实现。

「变量嵌套」是最终实现的效果,而「命令嵌套」是实现这种效果的手段方法。

具体来说「命令嵌套」就是有层次地嵌套多个命令,而实现「变量嵌套」的「命令嵌套」方式就是嵌套call命令。

二、嵌套CALL命令的实现细则(只研究二层和三层)

(1)最里面的一层变量用一对百分号包裹。

(2)除非最里面,不然不管哪一层都必须用偶数对百分号。

比如下面这个示例,当有二层嵌套时,第二层用3对百分号,就出错了。

 (3)第二层可以用两对或者四对进行包裹。

以二层嵌套为例,当第二层用6对百分号时,就会输出「echo关闭」;而进一步调至8层、10层也会出这种类型的错误。

(4)第三层的百分号对数必须是第二层的两倍。

如果第二层是两对,那么第三层必须是四对,不然就会出错。

如果第二层是四对,那么第三层必须是八对,不然就会报错 

 (5)嵌套两层就减一、嵌套三层就加一。

如果是嵌套两层,而第二层是两(三)对百分号,call的数量必须大于或等于1(2),也就是说call只能多不能少。

如果是嵌套三层,而第二层是两(三)对百分号,call的数量必须大于或等于2(3),也就是说call只能多不能少。

看下面的案例,即便是6个call,也是正确地执行。

(6)更多层的情况,我没有研究,不过可以肯定的是大部分的场景3层已经完全够了!

三、嵌套call命令的案例

在bat文件中执行下面的代码。

@echo off
set num=AmyAmy 2006 MP.CSDN.net
set a=123245
set b=87754321
echo.
echo a=%a% b=%b% num=%num%
set result=%%%%%%%%num:~%%%%b:~%a:~3,1%,1%%%%,4%%%%%%%%
echo %result%
call set result=%%%%%%%%num:~%%%%b:~%a:~3,1%,1%%%%,4%%%%%%%%
echo %result%
call call set result=%%%%%%%%num:~%%%%b:~%a:~3,1%,1%%%%,4%%%%%%%%
echo %result%
call call call set result=%%%%%%%%num:~%%%%b:~%a:~3,1%,1%%%%,4%%%%%%%%
echo %result%
echo.
pause

结果如下。

我们可以看出,一共用call命令嵌套了三次,分别递增地用了1-3个call命令。

百分号的数量关系是正确的,set的右边语法完全没问题。

相应的,call越多,右边的变量被解析出来的层数也会越多。

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

【批处理DOS-CMD命令-汇总和小结】-变量嵌套和命令嵌套 的相关文章

  • 在 Windows 上查找父进程 ID

    Problem 给定远程 Windows 主机上的进程 ID 和命令行访问权限 如何找到其父进程的 PID Solution 鉴于 Marc B 的回答 我们可以使用 WMIC 命令示例here https learn microsoft
  • Flask 环境变量被忽略(FLASK_ENV 和 FLASK_APP)WINDOWS 10

    After setting the environment variables FLASK ENV and FLASK APP running flask run will give me this error 该代码片段显示了命令提示符
  • Windows批处理脚本启动程序并退出控制台

    我有一个用于启动程序的批处理脚本 例如notepad exe 当我双击这个批处理文件时 记事本正常启动 但是黑窗cmd谁发起的notepad exe仍然在后台 我需要做什么才能启动notepad exe并使cmd窗口消失 edit 比使用更
  • 如何在 C# 中获取 CMD/控制台编码

    我需要指定正确的代码页来使用 zip 库打包文件 正如我所见 我需要指定控制台编码 在我的例子中为 866 C Users User gt mode Status for device CON Lines 300 Columns 130 K
  • MS Batch:检查驱动器是否正在使用

    我需要检查驱动器 Z 是否正在使用 例如 正在由应用程序使用 已打开 我的批处理文件如下所示 Mount Z wait 15 minutes check if drive Z is in use IF NOT unmount Z ELSE
  • cmd中哪个符号是转义符?

    我有这个代码 powershell command New Object Net WebClient DownloadFile linkToMyFile file C my file 它用于下载文件 当我在远程服务器上的 cmd 中执行它时
  • 在重定向文件 (>output.txt) 中显示带重音符号的字符

    example mode con cp gt tmp output tmp notepad tmp output tmp show Statut du p riph rique CON Page de codes 850 代替 Statut
  • DOS批处理命令一次处理1个文件

    我正在尝试执行一项特定任务 其中需要从可能包含未定义数量的文件的文件夹中读取文件 一次一个 我需要能够将文件夹中的第一个文件移动到新位置 然后使用另一个批处理文件执行另一个任务 主要目的是一次读取一个文件 而不是执行将读取所有文件的 立刻
  • 如何通过批处理文件打开Windows防火墙上的端口

    有没有办法在批处理文件中通过批处理文件打开 Windows 上的特定端口 如果让安装程序为我们的服务器应用程序执行此操作 而不是让用户手动执行此操作 那就太好了 Use 执行程序 http technet microsoft com en
  • 找不到图标路径的 Cordova Android 版本

    打字时cordova build android在 DOS 框中 没有构建任何内容 但我看到一条错误消息 错误 源路径不存在 resources android icon drawable hdpi icon png 我已经更新了 Cord
  • 从 Windows Batch (cmd.exe) 中的文件读取环境变量

    我正在尝试从批处理文件中读取变量 以便稍后在批处理脚本 Java 启动器 中使用 理想情况下 我希望所有平台 Unix Windows 上的设置文件都具有相同的格式 并且也是有效的 Java 属性文件 也就是说 它应该看起来像这样 sett
  • 批处理文件搜索与本地文件同名的文件夹并将所述文件移动到找到的文件夹不起作用

    因此 我尝试创建一个批处理文件 该文件将在与批处理文件相同的目录中获取 pdf 文件并输出文件名 无扩展名 我使用这段代码来完成此任务 echo off for r C Users me Test Folder G in pdf do se
  • CMD shell 中的可用空间

    有没有办法在 CMD 中获取磁盘或文件夹的可用磁盘空间量 无需安装一些第三方应用程序 我有一个 CMD 可以将一个大文件复制到给定目录 当然可以使用 复制命令返回错误级别 但我必须等待时间 需要复制文件 例如 然后磁盘已满并且复制操作失败
  • 无法在 Windows 7 64 位中正确设置 java 路径

    我已经在计算机中安装了 java 1 6 并且还使用高级变量设置设置了路径 当我尝试执行 java 时 在命令提示符下出现此错误 Error could not open C Program Files Java jre7 lib amd6
  • 批处理:在带有管道的 for 循环中执行带引号的命令来查找

    您能否建议如何修复下面的命令 该命令会从 svn 中删除未版本控制的项目 rem echo off for f tokens 2 i in c Program Files TortoiseSVN bin svn exe status no
  • 如何在 Windows 中增加 JVM 运行时内存

    我正在尝试通过命令行运行脚本 因为我正在使用以下命令 C apache jmeter 4 0 apache jmeter 4 0 bin gt jmeter f n t C apache jmeter 4 0 apache jmeter 4
  • 如何通过 DOS 批处理命令发送电子邮件?

    我在 DOS 中有一个批处理文件 可以进行一些检查 完成后我需要发送一封电子邮件 我在 interwebz 上找到了一些解决方案 但大多数都是第三方的 或者只是在 Outlook 中打开新邮件 我需要命令来发送完整的电子邮件 而无需任何人工
  • 如何为最终用户方便地启动Java GUI程序

    用户想要从以下位置启动 Java GUI 应用程序Windows 以及一些额外的 JVM 参数 例如 javaw Djava util logging config file logging properties jar MyGUI jar
  • Windows 7 远程关机:访问被拒绝(5) [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我正在尝试强制从我的笔记本电脑远程关闭我的电脑 machine gt shutdown m 192 168 2 10 s f t 0 192 168
  • 用于创建计划任务的 VBScript

    我正在尝试创建一个 VBScript 它创建一个批处理文件 然后创建一个计划任务来运行该批处理文件 到目前为止 我尝试过的所有操作都创建了批处理文件 但没有创建计划任务 并且我没有收到任何错误 这是我到目前为止所拥有的 Option Exp

随机推荐

  • H264解码深度解析——DM8168 OMX从H264文件读取一帧数据(do chunking of h264)

    源码来源 TI DM8168 EZSDK OMX examples decode display 基本执行流程如下 Decode GetNextFrameSize H264 ParsingCtx pc 函数源码 加注释 如下 Decode
  • Linux vim使用方式学习纪要

    vim学习 在Linux下工作和学习 离不开vi和vim的使用 巧妙记住各种模式下的各种指令 不仅可以在工作中大大提高效率 还能装一个满分的哔 我比较菜 只会下面最常用的4种模式中的部分组合技能 不过好像在我的开发工作中已经完全足够了 模式
  • C++学习第八篇——字典树

    学习了之前的树状结构 接下来就可以利用树状结构存储数据了 首先什么是字典树 字典树就是利用树的结构按照字典的原理进行存储的数据结构 树的结构我们了解了 字典是什么样的呢 我们通常去查英文单词的时候 往往都是英文字母a b c d x y z
  • JSON传输协议制定

    通常情况下 大到系统与系统间的通信 小到控制器的返回 我们现在都是采用的json传输 但是单单传输需要的数据 往往不能达到对返回结果成功与否的判断 或是出现解析错误 这时候就需要制定一套标准的传输协议 status 字符串 状态码 0 成功
  • 无监督学习和监督学习的区别

    1 什么是无监督学习 无监督学习是机器学习技术中的一类 用于发现数据 中的模式 利用 学习数据的分布或数据与数 据之间的关系被称作无监督学习 2 无监督学习代表算法 1 k means算法 聚类算法 3 什么是监督学习 监督学习描述的任务是
  • c#和sqlserver数据库:第一课 连接

    一 操作步骤 1 下载Microsoft Data SqlClient包 1 右击 依赖项 2 点击 管理NuGet资源包 3 搜索SqlClient 选择第一个点击下载 2 连接步骤 代码 1 构建连接字符串 指定DataSource U
  • 金晟富:6.23黄金原油今日多空怎么看?实时现价单操作布局

    前言导读 不得不感叹时间过的好快 2021转眼六月尾了 一年又过了二分之一 投资 一定要有长远规划 而布局技巧是成功的关键 如果你此时正在纠结亏损 或者这么多策略该跟随哪一单 而这时候 你可以选择观察一下我们群内的操作 实时公开 公明 公平
  • 删除数组内 对象id相同的值。

    删除数组内 对象id相同的值 async arrRepeat data const result data reduce accumulator current gt let exists accumulator find item gt
  • 文本AI3.5的安装和基本用法:轻松掌握

    PC端 1 首先打开Edge浏览器 这个浏览器是windows系统自带的 2 打开扩展管理 gt 查找新的扩展 查找新的扩展 3 输入 侧边栏 国内免费使用 进行搜索 gt 安装 下载后记得要跟上图一下将插件的开关按钮打开 4 简单的使用
  • Java 如何实现 List<String> 的深拷贝?

    对于 List
  • ChatGPT常用指令大全,带你学习ChatGPT

    ChatGPT是一种自然语言处理技术 可以模拟人类对话并回答问题 在使用ChatGPT时 您需要了解一些常用的指令和命令 以便更好地控制ChatGPT的行为和输出 以下是常用的ChatGPT指令大全 手机端示意图 名片交流探讨更多指令与学习
  • 第 46 届世界技能大赛浙江省选拔赛“网络安全“项目C模块任务书

    第46届世界技能大赛浙江省选拔赛 网络安全 项目C模块 夺旗行动 CTF 挑战 第46届世界技能大赛浙江省选拔赛 网络安全 项目C模块 第一部分 WEB 第二部分 CRYPTO 第三部分 REVERSE 第四部分 MISC 第五部分 PWN
  • uniapp 返回上一页并传参

    a页面跳转到b页面 但是b页面需要传值给a页面的操作 方法一 a页面跳转到 b 的方法 onShow uni on update data gt console log data name 张三 console log data age 1
  • 关于PHP的命名空间

    http www php cn php weizijiaocheng 392925 html
  • yolov3项目实战——基于PyTorch实现的目标检测项目实战(附代码)

    一 数据准备 数据准备见 使用精灵标注助手制作yolov3训练数据集 附解析xml代码 本篇文章为项目实战部分 理论部分简析见 YoLov1 YoLov3演变历程 思维导图 二 项目代码部分 1 cfg py CLASS NUM 10 an
  • 技术可行性

    什么是技术可行性 1 技术可行性是指决策的技术和决策方案的技术不能突破组织所拥有的或有关人员所掌握的技术资源条件的边界 编辑
  • db2锁表后如何解锁_DB2死锁的解决过程全记录

    生产环境里使用的数据库是DB2 但是最近频繁出现一个奇怪的死锁现象 某一个select sql 语句总是会出现死锁 按照以往的经验 通常都是update delete之类的更新sql语句会出现死锁的问题 而且这个 select sql 语句
  • Flutter仿抖音点击进入直播间按钮动画实现

    利用flutter仿抖音点击进入直播间动画效果 效果图 对于这个widget 已经封装成插件 供大家依赖使用 askai animation button last version 组件的一些必选属性 const KaiAnimationB
  • Flink 1.17教程:聚合算子(Aggregation)之按键分区(keyBy)

    聚合算子 Aggregation 计算的结果不仅依赖当前数据 还跟之前的数据有关 相当于要把所有数据聚在一起进行汇总合并 这就是所谓的 聚合 Aggregation 类似于MapReduce中的reduce操作 按键分区 keyBy 对于F
  • 【批处理DOS-CMD命令-汇总和小结】-变量嵌套和命令嵌套

    参考来源 DOS 变量嵌套和命令嵌套 阿飞同学 博客园 bat脚本的基本命令语法 整合侠 博客园 一 什么是变量嵌套 命令嵌套 1 1 介绍一下字符串截取的知识 对于字符串变量A 要截取它的片段 语法是 A1 A m n 例如对于字符串变量