ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

浅显易懂的win批处理指令--for指令入门

2021-05-04 18:33:13  阅读:282  来源: 互联网

标签:do pause off 浅显易懂 %% win delims echo 指令


 for的基本用法是:

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

不带参数的for命令

@echo off
for %%i in (1 2 3 4 5) do echo %%i
pause

输出结果:

注意上面的临时变量%%i中的i,可以换成别的字母,但只能是一位。

带参数 /L 的for

参数/L 可以理解为 "list" 的意思,大小写均可。代表一个数列,下面脚本的意思是: 就是以 1 开始,步长为1 ,结束值为2的一个等差数列

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

输出结果:

带参数 /F 的for

参数/F可以理解为“file”的意思,代码处理对象为文本串, 常用的参数有skip,tokens,delims,看示例:

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

test.txt的内容如下:

A1
A2 
A3+111,222.333-444/555
A4
A5

skip

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

@echo off
for /f "skip=1" %%a in (test.txt) do echo %%a %%b %%c
pause

delims

delims=后面的字符的意识是,将文本每一行的内容以delims=后面的字符分割成若干列.for默认是以,;和空格作分割符的, 所以一般要取得整行内容通常会用"delims="这样的形式来取消for的默认分割符。如果使用空格,要将空格放到最后

@echo off
for /f "tokens=1-3 delims=+./-" %%a in (test.txt) do echo %%a %%b %%c
pause

tokens

tokens=1-5,1-5很好理解就1至5,前面我们用delims=后面的字符为分割符,将文本内容分成了多列,需要的是哪些列, 用它指定,默认是1列

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

代码中前面有个%%a, 这里的%%a就是代表第一列, 第二列就是%%b, 第三列就是%%c 依此类推
那么我们如果把

echo %%a %%b %%c %%d %%e 

改为 

echo %%e %%d %%c %%b %%a

会如何呢? 会显示

444 333 222 111  A3

 若是第一个%%a把它改为%%i也是一样,那么第二列就是%%j...%%k...依此类推,就是按英文字母的顺序依此类推的。

如果用tokens=1,2*  有什么区别呢?

代表从几至几
, 代表单一的,如 tokens=1,5 就是代表第一列和第五列
* 代表剩下的所有的列.  如:tokens=1,2*   代表%%a为第一列,  %%b为第二列,  %%c代表后面所有的列.
@echo off
for /f "tokens=1,2* delims=+./- " %%a in (test.txt) do echo %%a %%b %%c %%d %%e
pause

 for /F 不但可以循环文本内容还可以循环字符串,如:

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

 

for的 /D 参数

/D参数(常用来查询当前目录或者指定目录的下的文件夹)

基本用法:for /d %variable in (set) do command [command-parameters]

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

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

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

 For /R参数

基本用法:

FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]

检查以 [drive:]path 为根的目录树中,所有符合(set)的文件或者文件夹。如果在 /R 后没有指定目录,则使用当前目录。如果集仅为一个单点(.)字符,则枚举该目录树。


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

 枚举d:\tt下所有的 .bat文件(包括子目录)

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

 

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

 

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

 for遍历文件或目录时,你一定看不懂%%~anx之类的东西,它的含义如下:

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

 

只要记住d-盘符 p-路径 n-文件名 x-文件后缀 t -修改时间 z-文件大小 这些字符分别是代表的是什么意思就可以了,些字符是可以互相任意搭配的。

 

参考文章:

[1] 浅谈批处理for命令中的变量扩展

标签:do,pause,off,浅显易懂,%%,win,delims,echo,指令
来源: https://www.cnblogs.com/wangpenghui522/p/14729870.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有