目录
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 /