bat 脚本基础知识、命令详解

在window下.bat为批处理文件。我们今天来一起学习一下bat批处理的一些命令

  1. 不区分大小写

  2. 使用::注释。
    例如::这是一条注释

  3. 修饰符@ :修饰命令,经过@修饰的命令,不在输出原始命令,只输出执行结果
    输入1:

    echo hello1

    输出1:(输出了原始命令,和执行结果)

    c:\user\lenove>echo hello1
    hello1

    加入@ 然后 输入2:

    @echo hello2

    输出2:(只输出了执行结果)

    hello2

  4. echo:回显(打印输出)

    echo hello world!

    @echo off : 执行以后,后面所有的命令均不显示,包括本条命令。
    @echo on : 执行以后,后面所有的命令均不显示,但本条命令是显示的。

  5. pause : 也是一条命令,作用就是使程序暂停,也就是输出“请按任意键继续…”的原因
    如果不需要显示“请按任意键继续…”则使用

 	pause >nul
  1. color [attr] :设置命令行的背景与文字颜色。颜色属性由2个十六进制指定,第一个表示背景,第二个表示前景。每个数字可以是下面指定的值之一
数值颜色数值颜色
0黑色8灰色
1蓝色9淡蓝色
2绿色A淡绿色
3浅绿色B淡浅绿色
4红色C淡红色
5紫色D淡紫色
6黄色E淡黄色
7白色F亮白色
  1. call : 执行另一个批处理文件

    call c:\code\run.bat

  2. 打开一个程序

start iexplore http:\www.baidu.com \使用IE浏览器打开百度
start chrome http:\www.baidu.com \使用chrome浏览器打开百度
start wps \打开wps文档
start wps hello.doc \使用wps打开hello.doc文档

  1. dir path:输出path目录下所有文件名到控制台
    dir path >a.txt \输出path目录下所有文件名到a.txt,若没有,则创建

  2. del a.txt :删除a.txt。如果指定路径,则删除路径下所有的文件

  3. 创建文件、创建文件夹、移动、拷贝文件、拷贝文件夹

echo >a.txt mkdir c:\code //创建文件夹 md
move c:\a.txt d:\a.txt //剪切
copy c:\a.txt d:\a.txt //复制
rd c:\code //删除空文件夹 rem:删除非空文件夹

  1. set :设置变量功能有以下几点:
	set //显示所有的环境变量
	set c//显示所有的以c 开头的环境变量(不区分大小写)
	set c = hello //设置变量c的值为hello
	@echo c // 输出c
	@echo %c% //输出hello
	set d = c //赋值,d的值为c
	set d = %c% //赋值,d的值与c的值相同,都为hello
	set /p var=请输入变量的值://设置var的值为用户输入
	set /a var = 1+1 //可以用表达式为变量赋值
  1. 进入某个目录 cd /d 特定的目录
	cd /d "c:\program"
  1. for 循环
    cmd窗口中:for %i in (command1) do command2
    在批处理文件中:for %%i in (command1) do command2

    (1)  %%i 是 bat 脚本中for循环独有语法,代表变量;
    (2)  除了在for循环之内使用%%i, 其他情况使用%i%表示变量。 
    (3)  for、in和do是for语句的关键字,它们三个缺一不可;
    (4)  in之后,do之前的括号不能省略;
    (5)  command1表示字符串或变量,command2表示字符串、变量或命令语句;
    

看个例子:

::例子一
@echo off
for %%i in (ABC) do echo %%i
pause

例子一结果是:
在这里插入图片描述

::例子二
@echo off
for %%i in (A,B,C) do echo %%i
pause

例子二的结果是:
在这里插入图片描述

说明in 里面的内容默认是有分隔符的,默认的分隔符为 空格、逗号、等号

进一步说明,如果in里面的字符串变成 www,baidu,com结果应该是怎样的呢?把逗号换成空格、等号也一样。
在这里插入图片描述

接下来说点高级用法:
(1) 搜索当前目录有哪些文件?

@echo off
for %%i in (.) do echo “%%i”
pause

(2)搜索当前目录下有哪些文本文件?

@echo off
for %%i in (*.txt) do echo “%%i”
pause

(3) for /f 的用法
命令格式:

(a) for /f [“options”] %%i in (file) do command
(b) for /f [“options”] %%i in (“string”) do command --注意双引号
© for /f [“options”] %%i in (‘command’) do command --注意单引号

参数说明:

file代表一个或多个文件,可以使用通配符。
string 代表字符串
command代表命令
["options"]选项有多个:

 eol=c           - 指定一个行注释字符,遇到c开头的行就忽略掉。
 skip=n          - 指定在文件开始时忽略的行数。
 delims=xxx      - 指定分隔符。默认是空格和TAB。

 tokens=x,y,m-n  - 指每行的哪一个符号被传递到每个迭代
                   的 for 本身。这会导致额外变量名称的分配。m-n
                   格式为一个范围。通过 nth 符号指定 mth。如果
                   符号字符串中的最后一个字符星号,
                   那么额外的变量将在最后一个符号解析之后
                   分配并接受行的保留文本。
 usebackq        - 1.把单引号字符串作为命令;2.允许中使用双引号扩起文件名称。

假如文本a.txt内容如下

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

第一种情况: 使用 for /f %%i in (d:\a.txt) do echo %%i 显示结果如下:

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

因为命令默认是以空格和Tab作为分隔符,所以遇到分隔符之后,默认只取第一个,就将分隔符后面的都丢掉了。

如果想把每一行分解为更小的内容,怎么办?for 提供了更多的参数, 就是delims 和tokens:

delims :告诉for每一行应该拿什么作为分隔符,默认的分隔符是空格和tab键。
tokens :它的作用就是当你通过delims将每一行分为更小的元素时,由tokens来控制要取哪一个或哪几个。

比如使用 for /f "delims= " %%i in (d:\a.txt) do echo %%i 将空格作为分隔符,结果应该是:

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

如果想要每一行的最后面的元素呢,就是使用tokens参数了。
比如执行for /f "tokens=2 delims= " %%i in (d:\a.txt) do echo %%i 得到的结果应该是:

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

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

for /f "tokens=2,3 delims= " %%i in (d:\a.txt) do echo %%i %%j

怎么多出来一个%%j呢?
因为tokens后面要取每一行的两列,所以应%%i,代表第二列。用%%j代表第三列。并且必须按照英文字母表顺序排列。不能把%%j替换成%%k,因为i的后面是j,不是k。
所以结果是:

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

使用find 命令查找指定的字符串

@Echo Off
for /f "delims=" %%i in ('type a.txt^|find "疑似"') do (echo %%i)
Pause
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值