变量以双百分号加字母表示

时间:2022-05-16 02:52:21

contents structure [+]

一.简介

在DOS窗口中,输入for /?检察官方给出的for命令的用法。

FOR %variable IN (set) DO command [command-parameters] %variable 指定一个单一字母可替换的参数。 (set) 指定一个或一组文件。可以使用通配符(* 和 ?)。 command 指定对每个文件执行的命令。 command-parameters 为特定命令指定参数或命令行开关。 此刻开始讲每个参数的意思


我们知道了一个for命令的根基格局为:FOR 参数 %变量名 IN (相关文件或命令) DO 执行的命令。这里需要注意在DOS窗口中和在批措置惩罚惩罚文件中,for命令的格局有必然的分歧,在DOS窗口中,变量以单百分号加字母暗示,但若是在批措置惩罚惩罚文件中,变量以双百分号加字母暗示,批措置惩罚惩罚文件中,for命令的根基格局为:FOR 参数 %%变量名 IN (相关文件或命令) DO 执行的命令
参数有四种,分袂为/d、/r、/L、/f,每一种参数对应的for命令的具体格局也有所差别。接下来以此讲解每一种参数的使用:
接下来的所有案例,若不是出格说明,都是以批措置惩罚惩罚文件的方法。

二.for /d ... in ...

/d暗示目录搜索,它主要用于搜索目录,不会搜索文件。
for命令的格局为:FOR /D %%variable IN (set) DO command
如果set包罗通配符,将对set想匹配的每个目录执行Command,%%variable代表了每一个目录。

2.1 案例 案例:打印C://根目录下所有的文件夹名称

@echo off rem 进入到c盘根目录 c: rem 打印当前目录下的所有文件夹名称 for /d %%i in (*) do @echo %%i pause

案例:打印当前路径下,只有1-3个字母的文件夹名称

@echo off for /d %%i in (???) do @echo %%i pause

案例:显示所有以window开始的文件夹名称

@echo off rem 进入到C盘 c: rem 显示所有以window开始的文件夹名称 for /d %%i in (window?) do @echo %%i pause

三.for /r ... in ...

/r暗示递归,以递归的方法对当前目录下的每个目录执行操纵。
for命令的格局为:FOR /R [[drive:]path] %%variable IN (set) DO command
中括号[]暗示可有可无,如果不指定开始递归的根目录,则以当前目录作为递归的根目录。
这里需要注意,若set为点(.),则只枚举目录树。

3.1 案例 案例:显示C盘中所有以.exe结尾的文件名

@echo off for /r c: %%i in (*.exe) do @echo %%i pause

案例:显示当前目录及子目录下的所有以.exe结尾的文件名

@echo off for /r %%i in (*.exe) do @echo %%i pause

案例:显示当前目录及子目录的所有目录名

@echo off for /r %%i in (.) do @echo %%i pause


此刻清楚了/d 和 /r 参数的同异点了,他们都和目录有关,但/d只会检索当前目录下的所有目录,但/r可以以递归的方法检索所有目录。

四.for /L ... in ...

/L可以写成小写字母的/l,为了和数字1区分,下面还是用大写的字母L。
/L暗示迭代变量,在给定的起点、步长、终点迭代数据。
for命令的格局:for /L %%Variable in (Start#,Step#,End#) do Command
使用迭代变量设置起始值 (Start#),然后逐步执行一组范畴的值,直到该值赶过所设置的终止值 (End#)。/L 将通过对 Start# 与 End# 进行对照来执行迭代变量。如果 Start# 小于 End#,就会执行该命令。

4.1案例 案例:打印1到5

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

案例:增加5个CMD窗口

@echo off for /L %%i in (1,1,5) do start cmd pause


会发明,新增加了5个CMD窗口,若是(1,1,65535)呢,就会多开启65535个CMD窗口。如果把上面的start cmd换成 md %%i,那么就可以多成立5个文件夹。

五.for /f ... in ...

含有/f的for命令使用最多,
for命令的格局:

FOR /F ["options"] %%i IN (file) DO command FOR /F ["options"] %%i IN ("string") DO command FOR /F ["options"] %%i IN (command) DO command file代表一个或多个文件 string 代表字符串 command代表命令 ["options"] 可选


对付for命令的三个格局都大通小异,IN(file),IN("string"),IN(command)分袂暗示从文件、字符串、命令中读取数据。

file为文件名,凭据官方的说法是,for会依次将file中的文件打开,并且在进行到下一个文件之前将每个文件读取到内存,凭据每一行分成一个一个的元素,忽略空白的行,看个例子。

假如文件a.txt中有如下内容:
第1行第1列 第1行第2列 第1行第3列
第2行第1列 第2行第2列 第2行第3列
第3行第1列 第3行第2列 第3行第3列


可以使用type命令来显示:

@echo off type a.txt pause

显示如下:

第1行第1列 第1行第2列 第1行第3列 第2行第1列 第2行第2列 第2行第3列 第3行第1列 第3行第2列 第3行第3列

使用for命令同样也可以完成这个成果:

@echo off for /f "delims=\n" %%i in (a.txt) do echo %%i pause

此中delims=\n暗示以换行符支解,,

@echo off for /f %%i in ("asas daa") do @echo %%i pause

上面的语句会显示asas。

delims关键字

delims关键字暗示分隔断绝分手符,需要注意若不指定delims那么,默认以空格和Tab键支解。如果凭据下面的格局使用空格来显示的话:

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

显示:

第1行第1列 第2行第1列 第3行第1列

可以看出值显示了第一列的值

tokens关键字

tokens命令可以指定显示哪一列的数据,该命令还撑持通配符(*)

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

效果:

第1行第2列 第1行第3列 第2行第2列 第2行第3列 第3行第2列 第3行第3列