【BAT】for命令用法

这篇具有很好参考价值的文章主要介绍了【BAT】for命令用法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

  • 对一组文件中的每个文件运行指定的命令。
  • 可以在批处理程序中或直接从命令提示符使用 for 命令。

for命令一般用法如下:

  • 普通用法
    for [%%|%]variable in(set) do command [command-parameters]

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

  • 只限于目录
    for /d [%% | %]variable in (set) do command [command-parameters]

如果 set 包含通配符(* 和 ?),则指定与目录名匹配,而不是文件名。

  • 递归
    for /r [[drive :]path] [%% | %]variable in (set) do command [command-parameters]

进入根目录树[drive:]path,在树的每个目录中执行 for 语句。如果在 /R 后没有指定目录,则假定为当前目录。如果 set 只是一个句号 (.) 字符,则只列举目录树。

  • 迭代
    for /l [%% | %]variable in (start,step,end) do command [command-parameters]

集合是一系列按步长量划分的、从头到尾的数字。这样,(1,1,5) 将生成序列 1 2 3 4 5,而 (5,-1,1) 将生成序列 (5 4 3 2 1)。

  • 文件处理
    for /f [<parsingkeywords>] [%%|%]variable in (set) do command [command-parameters]]

提取文本信息,则是for /f的拿手好戏:读取文件内容;提取某几行字符;截取某个字符片段;对提取到的内容再切分、打乱、杂糅……只要你所能想到的花样,for /f 都会想方设法帮你办到,因为,for /f 就是被设计成专门用于解析文本的


一、for循环普通用法

1.1、介绍

for %%variable in (set) do command [command-parameters]

注意点:

  • forindo是for语句的关键字,它们三个缺一不可
  • set是任何序列,可以只有一个元素。元素可以是变量、字符串,元素之间用空格键、tab键、逗号、分号或等号分隔
  • set必须用()包围,即使只有一个元素
  • %%variable是形式变量,即使没有在command中被使用,也不能省略
  • 为了不与批处理中的%0~%9这10个形式变量发生冲突,请不要随意把%%variable替换为%%0~%%9中的任意一个
  • for语句依次提取(set)中的每一个元素,把它的值赋予形式变量variable,带到do后的command中参与命令的执行;当执行完一次do后的语句之后,再提取(set)中的下一个元素,再执行一次command,如此循环,直到(set)中的所有元素都已经被提取完毕,该for语句才宣告执行结束

1.2、用法

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

执行结果:

【BAT】for命令用法

二、for /d 用法

for /d用于搜索目录或文件夹(不搜索文件),而且只搜索指定目录,不搜索子目录

搜索C:\Users\dell\Desktop\batTest下的所有文件夹:

@echo off
for /d %%i in (C:\Users\dell\Desktop\batTest\*) do echo %%i
pause

执行之前:

【BAT】for命令用法

执行结果:

【BAT】for命令用法

三、for /r 用法

for /r主要用于搜索指定路径及其所有子目录中符合要求的文件(/r后如果没有指定目录,则使用当前目录)

C:\Users\dell\Desktop\batTest下的*.txt文件修改后缀名为.doc文件

@echo off
for /r %%i in (*.txt) do ren "%%i" "%%~ni.doc"
pause

执行之前:

【BAT】for命令用法

执行结果:

【BAT】for命令用法

四、for /l 用法

for /l %variable in (start,step,end) do command [command-parameters]

该集表示以增量形式从开始到结束的一个数字序列。因此,(1,1,5)将产生序列1 2 3 4 5,(5,-1,1)将产生序列(5 4 3 2 1)

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

执行结果:

【BAT】for命令用法

五、for /f 用法

5.1、介绍

for /f 这个可能是最常用的,也是最强的命令,主要用来处理文件和一些命令的输出结果
命令格式:
(1).FOR /F [“options”] %%i IN (file) DO command
(2).FOR /F [“options”] %%i IN (“string”) DO command–注意双引号
(3).FOR /F [“options”] %%i IN (‘command’) DO command–注意单引号

/f 表示读取文件file内容,以行为单位赋给%%i

  • 默认情况下,每行以空格键作为分隔符分割为第1节、第2节。。。默认只读取第1节赋值给%%i
  • 默认情况下,忽略以分号;打头的行

5.2、for /f %%i in (file) do command

file为文件名,按照官方的说法是,for会依次将file中的文件打开,并且在进行到下一个文件之前将每个文件读取到内存,按照每一行为一个元素,忽略空白的行。
假如文件C:\Users\dell\Desktop\batTest\test.txt中有如下内容:
【BAT】for命令用法
使用命令遍历文件中的内容:

@echo off
for /f %%i in (C:\Users\dell\Desktop\batTest\test.txt) do echo %%i
pause

for会先打开test.txt,然后读出test.txt里面的所有内容,把它作为一个集合,并且以每一行(文件中无分隔符情况下)作为一个元素,用%%i依次代替每个元素,然后执行do后面的命令。

执行结果为:

111111111111111111
222222222222222222
333333333333333333
444444444444444444
555555555555555555
666666666666666666
777777777777777777
请按任意键继续. . .

如果遇到有分隔符的情况的话,就无法将所有的内容显示出来,因为命令默认是以空格和TAB为分隔符,所以它遇到分隔符之后,默认只取第一个,就将分隔符后面的都丢掉了。

例如test.txt内容变为:

【BAT】for命令用法

执行结果为:

111111
222222
333333
444444
555555
666666
777777
请按任意键继续. . .

5.2.1、delims和tokens

如果我们还想把每一行再分解更小的内容,该怎么办呢?for命令提供了更多的参数,它们就是:delims和tokens

delims :告诉for每一行应该拿什么作为分隔符,默认的分隔符是空格和tab键

for /f "delims= " %%i in (C:\Users\dell\Desktop\batTest\test.txt) do echo %%i
for /f %%i in (C:\Users\dell\Desktop\batTest\test.txt) do echo %%i
这两行效果是一样的

如果我们想要每一行的后面的元素,那又如何呢?这个时候就可以利用tokens参数,它的作用就是当你通过delims将每一行分为更小的元素时,由tokens来控制要取哪一个或哪几个。
显示第二列,示例如下:

@echo off
for /f "tokens=2 delims= " %%i in (C:\Users\dell\Desktop\batTest\test.txt) do echo %%i
pause

如果要显示第二列和第三列,则换成tokens=2,3或tokens=2-3,全部显示则使用通配符tokens=*。

注意:如果显示多个元素(非*),比如这里的tokens=2-3,语句应该写成这样:

for /f "tokens=2,3 delims= " %%i in (C:\Users\dell\Desktop\batTest\test.txt) do echo %%i %%j

怎么多出一个%%j
这是因为你的tokens后面要取每一行的两列,用%%i来替换第二列,用%%j来替换第三列。
并且必须是按照英文字母顺序排列的,%%j不能换成%%k,因为i后面是j

显示从第二列到最后的一列,命令如下:

@echo off
for /f "tokens=2,* delims= " %%i in (C:\Users\dell\Desktop\batTest\test.txt) do echo %%i %%j
pause

5.2.2、skip,eol和usebackq

  • skip
    表示跳过第1到第n行,从n+1行开始读取,默认n=0,就是告诉for忽略前n行
    示例如下:

    @echo off
    for /f "skip=6 tokens=1,2 delims= " %%i in (C:\Users\dell\Desktop\batTest\test.txt) do echo %%i %%j
    pause
    
  • eol
    用来指定当一行以什么符号开始时,就忽略它
    示例如下:

    @echo off
    for /f "eol=# tokens=1,2 delims= " %%i in (C:\Users\dell\Desktop\batTest\test.txt) do echo %%i %%j
    pause
    
  • usebackq
    usebackq 是一个增强型参数,当使用了这个参数之后,原来的for语句中第一个括号内的写法要做如下变动:如果第一个括号里的对象是一条命令语句的话,原来的单引号 ’ 要改为后引号 ` ;如果第一个括号里的对象是字符串的话,原来的双引号 " 要改为单引号 ’ ;如果第一个括号里的对象是文件名的话,要用双引号 " 括起来。
    (1)命令语句示例如下:

    @echo off
    for /f usebackq %%i in (`set`) do echo %%i
    pause
    

    (2)文件名示例如下:

    @echo off
    for /f usebackq %%i in ("C:\Users\dell\Desktop\batTest\test.txt") do echo %%i
    pause
    

    (3)字符串示例如下:

    @echo off
    for /f usebackq %%i in ('hello world') do echo %%i
    pause
    

5.3、for /f %%i in (“string”) do command

示例:

@echo off
for /f "tokens=2,* delims= " %%i in ("this is an example!") do echo %%i %%j
pause

执行结果:

is an example!
请按任意键继续. . .

对于字符串的处理类似于文件的处理,此处不再赘述。

5.4、for /f %%i in (‘command’) do command

该命令将command的执行结果作为集合,示例:

@echo off
for /f "tokens=2,* delims==" %%i in ('set') do echo %%i
pause

执行结果,部分展示:

C:\ProgramData
C:\Program Files
C:\Program Files (x86)
C:\Program Files
$P$G
C:\Program Files\WindowsPowerShell\Modules;C:\windows\system32\WindowsPowerShell\v1.0\Modules
C:\Users\Public
C:\Users\dell\AppData\Local\Programs\Python\Python310
win32-msvc2015
D:\Qt5.12.0\5.12.0\msvc2017_64\lib\cmake\Qt5
D:\VS2019Working\qt-everywhere-opensource-src-4.8.7
C:\Users\dell\AppData\Local\QtMsBuild

其他操作类似于文件的处理,此处不再赘述。

六、路径扩充

变量%i的扩充 作用
%~i 删除任何引号",扩展 %i
%~fi 将 %I 扩展到一个完全合格的路径名
%~di 仅将 %i 扩展到一个驱动器号
%~pi 仅将 %i 扩展到一个路径
%~ni 仅将 %i 扩展到一个文件名
%~xi 仅将 %i 扩展到一个文件扩展名
%~si 扩展的路径只含有短名
%~ai 将 %i 扩展到文件的文件属性
%~ti 将 %i 扩展到文件的日期/时间
%~zi 将 %i 扩展到文件的大小
%~$PATH:i 查找列在路径环境变量的目录,并将 %i 扩展到找到的第一个完全合格的名称。如果环境变量名未被定义,或者没有找到文件,此组合键会扩展到空字符串

还有组合增强语法:文章来源地址https://www.toymoban.com/news/detail-428427.html

变量%i的扩充 作用
%~dpi 仅将 %i 扩展到一个驱动器号和路径
%~nxi 仅将 %i 扩展到一个文件名和扩展名
%~fsi 仅将 %i 扩展到一个带有短名的完整路径名
%~dpi 仅将 %i 扩展到一个驱动器号和路径
%~dp$PATH:i 搜索列在路径环境变量的目录,并将 %i 扩展到找到的第一个驱动器号和路径
%~ftzai 将 %i 扩展到类似输出线路的 DIR

到了这里,关于【BAT】for命令用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用bat命令搜索当前目录下与指定内容相匹配的文件的方法

    使用 bat 命令搜索当前目录下与指定内容相匹配的文件,可以使用以下方法: 在命令行中输入 bat 命令,后面跟上搜索内容和文件名模式。例如: 这样可以在当前目录下搜索所有以 .txt 为扩展名的文件,并在匹配到的行中显示搜索内容。 如果需要搜索子目录中的文件,可以使

    2024年02月07日
    浏览(43)
  • C++中的for( : )用法

    当我在LeetCode中刷题的时候,经常碰到解析中的一种用法 也就是所谓的for( : )语句 接下来是该语句的一些小用法 正常我们想遍历一个数组的时候,我们会选择: 而在C++11之中,我们会有一个用法也就是for( : )去表示这一过程 其用法也就是 for(类型 变量名称 : 容器/数组等内容

    2024年02月13日
    浏览(36)
  • 解决Tomcat双击startup.bat脚本文件时,命令窗口一闪而过的问题

    目录 如何查看错误信息 配置JAVA_HOME环境变量 这种情况下,无法查看错误信息,所以无法对Tomcat进行诊断,就无法找出错误原因。 1. 针对上述情况,可以先启动一个命令行窗口(cmd) win+R --- 确定  。   2. 将目录切换到Tomcat安装目录中的bin目录 我是将Tomcat安装到了D盘上,此

    2024年02月06日
    浏览(51)
  • windows系统cmake生成c++动态库无lib文件解决方法 && bat文件批处理cmd命令

    作为cmake初学者,在windows系统下使用cmake生成c++动态库时出现了下图所示问题,是关于lib文件的。找了一圈,也没发现生成有lib文件。 在google上查,才发现windows系统下动态库生成lib文件,还需要添加以下命令: 生成动态库Demo(链接在此) 文件目录架构: ——源文件目录 —

    2023年04月25日
    浏览(44)
  • 使用 PowerShell 将 Excel 中的每个工作表单独另存为独立的文件

    导语:在日常工作中,我们经常需要处理 Excel 文件。本文介绍了如何使用 PowerShell 脚本将一个 Excel 文件中的每个工作表单独另存为独立的 Excel 文件,以提高工作效率。 在开始之前,请确保已经安装了 Microsoft Excel 并在 PowerShell 环境中启用了 COM 对象。 下面是执行该操作的

    2024年02月13日
    浏览(41)
  • Windows环境命令行CMD启动远程服务器上的bat文件,附查看远程服务器进程和按PID停止远程服务器进程命令

    Windows环境命令行CMD启动远程服务器上的bat文件,附查看远程服务器进程和按PID停止远程服务器进程命令 Windows环境命令行CMD启动远程服务器上的bat文件,命令如下: 执行后会返回启动的进程ID: 查看远程服务器进程命令: 按PID停止远程服务器进程命令:

    2024年02月07日
    浏览(71)
  • 【FPGA/verilog -入门学习5】verilog中的genrate for 和for 以及数组的用法

    本文参考:verilog generate语法总结-CSDN博客 Verilog数组赋值_笔记大全_设计学院 在Verilog中, generate for 和 for 都是用于循环的结构,但是它们具有不同的应用场合和语义。 for 循环: for 循环主要用于行为描述(behavioral description),通常用于描述算法或数学运算。 for 循环在仿真

    2024年02月03日
    浏览(46)
  • linux系统之间文件互传scp命令用法

    以下内容转自网络: 两台LINUX主机之间要互传文件时可使用SCP命令来实现 1. 需要输入密码:    $ cd cd /home/tony/.ssh/    $ scp id_rsa.pub root@172.17.12.57:/root/.ssh/authorized_keys      (然后输入172.17.12.57那台机器下的root密码,便可以传输文件id_rsa.pub       到,远程机器/root/.ssh/下,

    2024年02月06日
    浏览(48)
  • docker-compose 一键启动 容器中的一组相关的应用

    docker-compose是docker官方的开源项目,负责实现对docker容器的快速编排。 docker-compose 使用一个docker-compose.yml模板文件,定义一个多容器的应用,然后使用一条命令安装所有的依赖,并完成构建。 docker-compose解决容器与容器之间如何管理编排的问题。 docker-compose 多服务部署工具

    2024年02月12日
    浏览(47)
  • Windows 批处理(bat) for循环语句使用教程

    注意事项: f or、in 和 do是for语句的 ,它们三个缺一不可; 在 in 之后,do 之前的 括号\\\"()\\\"不能省略 ,do 后可以有括号,且 括号内不能有注释 %%i 是for语句中 对形式变量的引用 ; for语句的形式变量I, 可以换成26个字母中的任意一 个,这些字母会 区分大小写 ; in和

    2024年02月04日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包