首先表明本人并不赞同用变量扩展这个概念,因为用这个概念是不利于新手的理
解的。同时本人认为用保留变量信息这个概念可能更为贴切,我们姑且先如此定义
吧。
新手们可能在别人的代码中见过%%~ni %%~xi %%~dpi这样的字符,于是很多新手
于是发问了:这个东东是什么啊?老手们便丢下一句话“变量扩展”或写下for /?。
有心一点的新手便会打开cmd输入for /?来查看帮助信息,结果往往是看得一头雾水,
不知道仍是不知道,今天我们就来解决这个问题了。
大家先用以下代码搭建好以下环境:

@echo off
md d:\temp
cd.>d:\temp\abcd.efgh
start d:\temp

再在当前目录中新建test.bat,内容如下:

@echo off
for /f %%a in ('dir /s /b a*') do (
echo %%a:文件完整信息
echo %%~da:保留文件所在驱动器信息
echo %%~pa:保留文件所在路径信息
echo %%~na:保留文件名信息
echo %%~xa:保留文件后缀信息
echo %%~za:保留文件大小信息
echo %%~ta:保留文件修改时间信息
echo %%~dpa:保留文件所在驱动器和所在路径信息
echo %%~nxa:保留文件名及后缀信息
echo %%~pnxa:保留文件所在路径及文件名和后缀信息
echo %%~dpna:保留文件驱动器、路径、文件名信息
echo %%~dpnxa:保留文件驱动器、路径、文件名、后缀信息
)
pause>nul

运行这个批处理大家就会明白了。。。
大家只要记住在这其中d p n x (t z)这些字符分别是代表的是什么意思就可以了,
同时这些字符是可以互相任意搭配的,如%%~dzxa主要看你想保留下文件(变

量)的哪些信息了。

扩展:

一、不带参数的for:

让我们先来看一个示例: 
@echo off
for %%i in (1 2 3 4 5) do echo %%i
pause

将以上代码保存为批处理文件(如何保存?),然后运行,可以发现屏幕上显示1 2 3 4 5(每字一行),是不是明白了一些?它的整个运行机制我们可以这样看:

for不停的从括号中拿出5个“东西”来(以空格做间隔),并将这5个“东西”依次传给临时变量%%i,同时把这个变量echo出来....
从这个例子我们可以看出,for的基本用法是:

for 变量 in (目标) do 干什么?

变量常用%%i 来表示,当然也可以换成%%j;目标就是待处理的对象集合,比如这里的1 2 3 4 5;

二、带参数 /L 的for (这里的 参数/L 可以理解为 "list" 的意思,代表一个数列)
先看测试代码:

代码:

@echo off
for /l %%i in (1 1 5) do echo %%i
pause

显示结果也为:1 2 3 4 5(每字一行)
它的意思和上面的意思差不多,但是括号中的对象却不需要 写成 1 2 3 4 5 的形式了,而是:1 1 5,因为它启用了参数 /L ,就是告诉for,这个括号里的对象是个数列,怎样的数列?就是以 1 开始,步长 为1 ,结束值为5的一个等差数列,再举个实例:

代码:

::显示 从 10 - 20 的所有偶数:
@echo off
for /l %%i in (10 2 20) do echo %%i
pause

三、带参数 /f 的for(这里的参数/F可以理解为“file”的意思,代码处理对象为文本串)

::例一:

代码:

for /f "skip=1 tokens=1,2* delims= " %%a in (a.txt) do echo %%a %%b %%c
pause

先从引号内的东西讲起,很多新手对这些难以理解,因为 for /? 翻译的简直是一塌糊涂.

skip=
tokens=
delims=

这三项是用的最多的,根据需要.可以不用,可以一起使用,也可以只使用一个或两个. 但是不管使用几个都要用引号将它们扩起来.当然不使用时,自然就不需要引号了.

skip=
for循环文本内容是以行为单位,从上至下进行的,skip=1意识就是跳过文本的第一行,即不循环第一行, 那么skip=2 自然就是跳过前两行了,依次类推.........

delims=
先讲这句
delims=后面的字符的意识是,将文本每一行的内容以delims=后面的字符分割成若干列.

假设a.txt某一行的内容是 111,222.333 444/555
我们用下面的语句
::例二:

代码:

for /f "tokens=1-5 delims=,./ " %%a in (a.txt) do echo %%a %%b %%c %%d %%e
pause

显示结果是 111 222 333 444 555

解释:
  意识就是把111,222.333 444/555以,./和空格(不分先后)分成了5列.注意代码中/和"后面有个空格,
  使用中要注意空格要放到最后,如"delims=,. /" 这样就不行了.

那如果我们不使用逗号来分割会如何呢?如: "delims=./ "那么就会分割成111,222 333 444 555
看出区别了吗?delims=后面可以是多个字符,可以是空格,也可以什么都没有. 什么都没有代表什么呢?就是不以任何东西为分割符,也是整行的内容了. 因为for默认是以,;和空格作分割符的, 所以一般要取得整行内容通常会用"delims="这样的形式来取消for的默认分割符.

tokens=
tokens=1-5
1-5很好理解就1至5,前面我们用delims=后面的字符为分割符,将文本内容分成了多列,那么你需要的是哪些列呢?
用tokens=可以很好帮你提取到.
还是以例二为例:
通过dilims=,./  将文本分成了111 222 333 444 555 五列.
注意代码中前面有个%%a 这里的%%a就是代表第一列,第二列就是%%b,第三列就是%%c 依此类推.....
那么我们如果把echo %%a %%b %%c %%d %%e 改为 echo %%e %%d %%c %%b %%a 会如何呢?
当然.会显示 555 444 333 222 111

如果是:echo %%b %%d 又会显示什么呢?  不用我说了吧!
若是第一个%%a把它改为%%i也是一样,那么第二列就是%%j...%%k...依此类推....
明白了?就是按英文字母的顺序依此类推的.

这里我们用的是tokens=1-5但是在例一中,我们用的是tokens=1,2* 有什么区别呢?
其实差不多-号代表从几至几而逗号代表单一的,如 tokens=1,5就是代表第一列和第五列,而不是1至5列.
*号代表剩下的所有的列.如:tokens=1,2*代表%%a为第一列,%%b为第二列,%%c代表后面所有的列.
for /f 不但可以循环文本内容还可以循环字符窜,如:
::例三:

代码:

for /f "tokens=1-3 delims=,./ " %%a in ("111,222.333 444/555") do echo %%a %%b %%c
pause

只要将()里的字符串用引号扩起来,for就会把它当字符串来循环,而不是文本.

四、for的 /D 和/R 参数(这两个参数个人比较少用)

1>/D参数(常用来查询当前目录或者指定目录的下的文件夹)
基本用法:FOR /D %variable IN (set) DO command [command-parameters]
如:查询F盘根目录下的文件夹 (不包括文件)

代码:

@echo off
for /d %%i in (f:\*) do echo %%i
pause>nul

如果省略 括号中的 "f:\",则会直接查询批处理所在目录的文件夹
假设本批处理文件保存在:F:\test下
运行以下批处理代码,将会查询 F:\test下的文件夹

代码:

@echo off
for /d %%i in (*) do echo %%i
pause>nul

2> /r参数
基本用法:FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
检查以 [drive:]path 为根的目录树中,所有符合(set)的文件或者文件夹。如果在 /R 后没有指定目录,则使用当前
目录。如果集仅为一个单点(.)字符,则枚举该目录树。
用法示例:
枚举F:盘下所有的 文件

代码:

@echo off
for /r f:\ %%i in (*) do echo %%i
pause>nul

枚举F:盘下所有的 .bat文件(包括子目录),则:

代码:

@echo off
for /r f:\ %%i in (*.bat) do echo %%i
pause>nul

如果省略以上代码中的F:\,则会列举当前目录 所有符合(set)的文件
如:列举批处理所在目录的所有批处理文件(包括子目录)

代码:

@echo off
for /r %%i in (*.bat) do echo %%i
pause>nul

浅谈批处理for命令中的变量扩展相关推荐

  1. DOS批处理高级教程:第三章 FOR命令中的变量(转)

    DOS批处理高级教程:第一章 批处理基础 DOS批处理高级教程:第二章 DOS循环for命令详解 DOS批处理高级教程:第三章 for命令中的变量 DOS批处理高级教程:第四章 批处理中的变量 DOS ...

  2. 浅谈surging服务引擎中的rabbitmq组件和容器化部署

    1.前言 上个星期完成了surging 的0.9.0.1 更新工作,此版本通过nuget下载引擎组件,下载后,无需通过代码build集成,引擎会通过Sidecar模式自动扫描装配异构组件来构建服务引擎 ...

  3. 嵌入式开发-浅谈嵌入式MCU开发中的三个常见误区

    浅谈嵌入式MCU开发中的三个常见误区 原创 2017-09-30 胡恩伟 汽车电子expert成长之路 目录 (1)嵌入式MCU与MPU的区分 (2)误区一:MCU的程序都是存储在片上Flash上,然 ...

  4. matlab 2015 积分,浅谈MATLAB在数值积分中的应用

    <浅谈MATLAB在数值积分中的应用.doc>由会员分享,可免费在线阅读全文,更多与<浅谈MATLAB在数值积分中的应用>相关文档资源请在帮帮文库(www.woc88.com) ...

  5. 浅谈《家》中觉新形象与封建宗法制

    浅谈<家>中觉新形象与封建宗法制 学号:16340163 中山大学数据科学与计算机学院 目录 浅谈家中觉新形象与封建宗法制 中山大学数据科学与计算机学院 背景 觉新悲剧的一生 觉新的性格 ...

  6. 园林计算机制图在计算机上的应用,浅谈计算机在园林设计中应用

    浅谈计算机在园林设计中应用 (7页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 浅谈计算机在园林设计中应用中图分类号:F224-39文献标识 ...

  7. 浅谈电商运营中的定价|Ocean商论

    前言 我的一个经济学老师的研究领域是定价,在一次交流中,他开玩笑说如果有一个经济学家能把定价完全解释明白,他就会获得诺贝尔奖. 经济学中的定价模型是数学的最优解,但是业务中的定价则考虑的变量更多,且环 ...

  8. 浅谈一下对cocos2d-x中九宫格精灵的简单理解和使用

    浅谈一下对cocos2d-x中九宫格精灵的简单理解和使用 首先,使用cocos new命令创建了一个cocos2d-x的C++项目和Lua项目,在生成的HelloWorld中写测试代码. 1.C++代 ...

  9. python语法中infile语句_浅谈pymysql查询语句中带有in时传递参数的问题

    直接给出例子说明: cs = conn.cursor() img_ids = [1,2,3] sql = "select img_url from img_url_table where i ...

  10. 计算机技术在农业上应用论文,浅谈计算机在农业中的应用论文(2)

    浅谈计算机在农业中的应用论文篇二 <计算机技术在农业管理中的科学应用> 摘要:文章依据现代农业管理思想的内涵结合计算机应用技术的充分优势展开了如何在农业管理中全面应用计算机技术实现数字化. ...

最新文章

  1. 关于去除2个inline-block之间的间距
  2. 第一章 计算机系统概述 1.2.1 计算机硬件的基本组成 [计算机组成原理笔记]
  3. Ubuntu 修改 hostname
  4. directx最终用户运行时_WSL将支持GPU计算,并可运行Linux GUI应用
  5. Jquery Cookbook摘要之使用上下文参数
  6. 中国民生银行大数据团队的Flume实践
  7. 常见的三种Content-Type
  8. 在Windows Mobile上隐藏你的应用程序
  9. 传奇服务器常见的网络攻击方式有哪些?-版本被攻击
  10. html css前端框架,GitHub - zyj1022/wee: WEE—简单快速的响应式HTML/CSS前端框架
  11. R语言plotly可视化:plotly可视化回归模型实际值和回归预测值的散点图分析回归模型的预测效能、一个好的模型大部分的散点在对角线附近(predicted vs actual)
  12. Oracle 删除归档
  13. MNIST | 基于朴素贝叶斯分类器的0-9数字手写体识别
  14. H5C3进阶——播放器
  15. Python的Pexpect模块详解
  16. 用表格做出的阴影扇形图
  17. 如果你打算将游戏业务外包 那么这篇文章你就不得不看!
  18. javaScript canvas从入门到骨灰级玩家(基础篇)
  19. ORACLE ERP的词汇表(ZT)
  20. 航模继电器技术改进点,记录

热门文章

  1. YML格式(java 常用配置文件格式)
  2. H5打开APP或小程序
  3. 使用ConfuserEx加密混淆程序以及如何脱壳反编译
  4. HTML爱心网页制作[樱花+爱心]
  5. 欧洲语言框架A1到C2,法语等级 A1、A2、B1、B2、C1、C2
  6. 瞎聊机器学习——朴素贝叶斯以及拉普拉斯平滑
  7. 使用 laravel-admin 配置后台管理系统
  8. c语言小型超市库存与管理系统,小型超市管理系统的设计与实现(毕业设计).doc...
  9. Nantian PR-2/K10打印机的安装及配置方法
  10. 【环境搭建】在Ubuntu16.04上搭建Nginx-rtmp流媒体服务器