Bat批处理脚本for命令基础知识

在Bat批处理中,for是最为强大的命令语句,它能实现解析文本内容、遍历文件路径、数值递增/递减等操作;配合if、call、goto等流程控制语句,可以实现脚本复杂的自动化、智能化操作。

1. for命令基础

for命令,对一组文件中的每一个文件执行某个特定命令。

语法格式:

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

参数说明:

  • %variable 指定一个单一字母可替换的参数。
  • (set) 指定一个或一组文件。可以使用通配符。
  • command 指定对每个文件执行的命令。
  • command-parameters 为特定命令指定参数或命令行开关。

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

一个简单的例子:

@echo off
for  %%a in (ITPro进化论) do echo %%a
pause

运行结果:

for语句中in和do是必须有的;

in之后,do之前,也就是set的括号不能省略;

括号中的set可以是一个或多个字符串或变量,每一个字符串或变量称之为一个元素,每个元素之间可以用空格、tab键、逗号、分号、等号进行分隔;

实例:演示分隔

@echo off
echo 没有分隔的ABC
for  %%a in (ABC) do echo %%a
echo 通过空格分隔的ABC
for  %%a in (A B C) do echo %%a
echo 通过tab键分隔的ABC
for  %%a in (A	B	C) do echo %%a
echo 通过分号分隔的ABC
for  %%a in (A;B;C) do echo %%a
echo 通过逗号分隔的ABC
for  %%a in (A,B,C) do echo %%a
echo 通过等号分隔的ABC
for  %%a in (A=B=C) do echo %%a
pause

运行结果:

当括号中的ABC被分隔符分隔成3个元素后,for会对每一个元素执行一次命令,所以do后面的命令会执行3次;

第1次,把A这个字符作为变量a的值,带入do后的语句执行,输出字符A;第2次,把B这个字符替换为变量a的值,输出字符B,如此循环,第3次输出字符C,把所有元素遍历一遍后,才执行下一条命令pause。

实例:使用for语句显示当前目录下的文件名称,并查找以.md结尾的文件。

@echo off
ehco 显示当前目录下所有的文件名
for %%a in (*.*) do echo "%%a"
rem echo.是换行的意思
echo.  
echo 显示当前目录下以.md结尾的文件
for %%b in (*.md) do echo "%%b"
pause

运行结果:

2. for /D 语句扩展

for /D语句的作用:如果集(set)中包含通配符,则指定与目录名匹配,而不与文件名匹配。也就是通过for /D来打印出目录名,语法格式:

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

实例:for语句加/D命令与不加/D命令的对比。

@echo off
echo 默认显示当前目录下的文件名
for %%a in (*) do echo "%%a"
rem echo.是换行的意思
echo.  
echo 加上/D后显示当前目录下的文件夹名
for /D %%b in (*) do echo "%%b"
pause

运行结果:

实例:显示C盘下的目录,不包含子目录

@echo off
for /D %%i in (C:/*) do echo "%%i"
pause

运行结果:

3. for /R 语句扩展

检查以 [drive:]path 为根的目录树,指向每个目录中的 FOR 语句。

如果在 /R 后没有指定目录规范,则使用当前目录。如果集(set)仅为一个单点(.)字符,则枚举该目录树。

语法格式:

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

实例:不指定目录,显示当前目录下的所有文件,包括子目录下的文件。

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

运行结果:

实例:在D盘搜索Notepad–.exe程序并打开。

@echo off
for /r D:/ %%i in (Notepad--.exe) do (
    if exist %%i (
        echo 找到了 Notepad--.exe
        REM 去启动 Notepad--.exe
        start %%i
        echo 软件已启动
pause
        goto end
    )
)
echo 没有找到 Notepad--.exe
 
:end

运行结果:

4. for /L 语句扩展

for /L的作用是以增量形式从开始到结束生成一个数字序列。语法格式:

FOR /L %variable IN (start,step,end) DO command [command-parameters]
  • start:创建序列的开始位置;
  • step:创建序列时单步距离;
  • end:创建序列结束位置;

for /L 以增量形式从start开始,每次
增加step,直到end这个数字的序列。

实例:

@echo off
echo 创建1到6的序列
for /L %%i in (1,1,6) do echo %%i
echo.
echo 创建6到1的序列
for /L %%i in (6,-1,1) do echo %%i
echo.
echo 从2开始,每次增加3,到16结束的序列
for /l %%i in (2,2,13) do echo %%i

pause

运行结果:

实例:使用for语句创建100个txt文件

@echo off
cd test
for /l %%i in (1,1,100) do (
    cd>%%i.txt
)
echo 100个txt文件创建完成。
pause >nul

运行结果:

通过Bat批处理脚本创建100个txt文件只需几秒钟,效率非常高。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ITPro进化论

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值