三、网络整理BAT脚本——特殊命令(For和Goto)

目录

1. For

a). /d  仅为目录

b). /R 递归

c). /L 迭代数值范围

d) /f 用法多样

1). delims和tokens

2). skip和eol

3). usebackq

2. Goto


1. For


for 循环命令,只要条件符合,它将多次执行同一命令。

 

FOR %variable IN (set) DO command [command-parameters]

 

%variable                                   指定一个单一字母可替换的参数。

(set)                                             指定一个或一组文件。可以使用通配符。

Command                                  指定对每个文件执行的命令。

command-parameters            为特定命令指定参数或命令行开关。

 

在批处理程序中使用FOR命令时,指定变量请使用%%variable而不要用%variable。变量名称是区分大小写的,所以%i不同于%I。

%%变量名:这个变量名可以是小写a-z或者大写A-Z,他们区分大小写,FOR会把每个读取到的值给他。

如果启用命令扩展,则会支持下列FOR命令的其他格式:

FOR有4个参数 /d   /l   /r   /f。

a). /d  仅为目录

 

FOR /D %variable IN (set) DO command [command-parameters]

 

如果 Set (也就是上面写的 "相关文件或命令") 包含通配符(* 和 ?),将对与 Set 相匹配的每个目录(而不是指定目录中的文件组)执行指定的 Command。

他主要用于目录搜索,不会搜索文件。

 

@echo off

for /d %%i in (*) do @echo %%i

pause

 

把他保存放在C盘根目录执行,就会把C盘目录下的全部目录名字打印出来,而文件名字一个也不显示。

在来一个,比如我们要把当前路径下文件夹的名字只有1-3个字母的打出来

 

@echo off

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

pause

 

这样的话如果你当前目录下有目录名字只有1-3个字母的,就会显示出来,没有就不显示。

 

b). /R 递归

 

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

 

检查以 [drive:]path 为根的目录树,指向每个目录中的 FOR 语句。如果在 /R 后没有指定目录规范,则使用当前目录。如果集仅为一个单点(.)字符,则枚举该目录树。

他可以把当前或者你指定路径下的文件名字全部读取,注意是文件名字。

 

@echo off

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

pause

 

这个BAT保存到D盘随便哪里然后执行,就会看到,他把C盘根目录,和每个目录的子目录下面全部的EXE文件都列出来了,这里的c:就是目录了。

 

@echo off

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

pause

 

参数不一样了,这个命令前面没加那个C:也就是搜索路径,这样他就会以当前目录为搜索路径,比如你这个BAT你把他放在d:目录下执行,那么他就会把D:目录和他下面的子目录的全部EXE文件列出来。

 

 

 %%a:文件完整信息

 %%~da:保留文件所在驱动器信息

 %%~pa:保留文件所在路径信息

 %%~na:保留文件名信息

 %%~xa:保留文件后缀信息

 %%~za:保留文件大小信息

 %%~ta:保留文件修改时间信息

 %%~dpa:保留文件所在驱动器和所在路径信息

 %%~nxa:保留文件名及后缀信息

 %%~pnxa:保留文件所在路径及文件名和后缀信息

 %%~dpna:保留文件驱动器、路径、文件名信息

 %%~dpnxa:保留文件驱动器、路径、文件名、后缀信息

 

c). /L 迭代数值范围

 

FOR /L %variable IN (start,step,end) DO command [command-parameters]

 

该集表示以增量形式从开始到结束的一个数字序列。

使用迭代变量设置起始值 (Start),然后逐步执行一组范围的值,直到该值超过所设置的终止值 (End)。

/L 将通过对 Start 与 End 进行比较来执行迭代变量。如果 Start 小于 End,就会执行该命令。

如果迭代变量超过 End,则命令解释程序退出此循环。还可以使用负的 Step 以递减数值的方式逐步执行此范围内的值。例如,(1,1,5) 生成序列 1 2 3 4 5,而 (5,-1,1) 则生成序列 (5 4 3 2 1)。

例1:

 

@echo off

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

pause

 

保存执行看效果,他会打印从1 2 3 4 5 这样5个数字。(1,1,5)这个参数也就是表示从1开始每次加1直到5终止。

例2:

 

@echo off

for /l %%i in (1,1,5) do start cmd

pause

 

执行后会多出5个CMD窗口。原因在于“start”是开启cmd窗口命令。当然也可以把那个start cmd改成md %%i,这样就会建立指定个目录了。

 

d) /f 用法多样

含有/F的for有很大的用处,在批处理中使用的最多,用法如下:

格式:

 

FOR /F ["options"] %%i IN (file) DO command

FOR /

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值