bat实现命令行全盘遍历搜索字符串?

本文是学习bat整理的笔记,由于内容较多,建议结合右侧文章大纲查看。

%~dp0 “d”为Drive的缩写,即为驱动器,磁盘、“p”为Path缩写,即为路径,目录

cd %~dp0 :进入批处理所在目录

::作用:以管理员身份安装Apache
就是爱电脑网 WINDOWS批处理命令使用大全 批处理,也称为批处理脚本,英文译为BATCH,批处理文件后缀BAT就取的前三个字母.它的构成没有固定格式, ...
 
  • 这次的总结是针对于一次bug,先说下我们遇到的问题,就是后台人员告诉我们添加数据到100条数据的时候,101条就看不到,当时我觉得就是没有分页的原因,所以我就以为在jqgrid中设置一个loadonc ...

  •  
     
     
    
}

启动批处理文件中环境变量的本地化。
结束某一进程。常用的有以下两种用法:
 结束已知应用名称的某一进程
 结束已知进程码的某一进程
进程码可以通过任务管理器查询,或者通过 cmd 运行 tasklist 获取。
参数 -t 表示结束该进程,-f 表示强制结束该进程及所有子进程。
参数如果等于(not表示不等,下同)指定的字符串,则条件成立,运行命令,否则运行下一句。(注意是两个等号) 如果有指定的文件,则条件成立,运行命令,否则运行下一句。 如果程序返回值等于指定的数字,则条件成立,运行命令,否则运行下一句。(返回值必须按照从大到小的顺序排列) 很多DOS程序在运行结束后会返回一个数字值用来表示程序运行的结果(或者状态),称为错误码errorlevel或称返回码。 常见的返回码为0、1。通过if errorlevel命令可以判断程序的返回值,根据不同的返回值来决定执行不同的命令。
语法: if 条件 (成立时执行的命令) else (不成立时执行的命令) 
如果是多个条件,建议适当使用括号把各条件包起来,以免出错。 
注:如果 else 的语句需要换行,if 执行的行尾需用“^”连接,并且 if 执行的动作需用(括起来),否则报错 
choice 使用此命令可以让用户输入一个字符(用于选择),从而根据用户的选择返回不同的 errorlevel, 
注意:choice命令为DOS或者Windows系统提供的外部命令,不同版本的choice命令语法会稍有不同,请用choice /?查看用法。 
choice 使用此命令可以让用户输入一个字符,从而运行不同的命令。 
使用时应该加/c:参数,c:后应写提示可输入的字符,之间无空格。它的返回码为1234…… 
for 命令是一个比较复杂的命令,主要用于参数在指定的范围内循环执行命令。
%variable 指定一个单一字母可替换的参数。变量名称是区分大小写的,所以 %i 不同于 %I 
(set) 指定一个或一组文件。可以使用通配符。 
command 指定对每个文件执行的命令。 
如果命令扩展名被启用,下列额外的 FOR 命令格式会受到支持
如果集里面包含通配符,则指定与目录名匹配,而不与文件名匹配。 
检查以 [drive:]path 为根的目录树,指向每个目录中的FOR 语句。 
如果在 /R 后没有指定目录,则使用当前目录。如果集仅为一个单点(.)字符,则枚举该目录树。 
该集表示以增量形式从开始到结束的一个数字序列。 
eol=c - 指一个行注释字符的结尾(就一个,如“;”) 
skip=n - 指在文件开始时忽略的行数。 
delims=xxx - 指分隔符集。这个替换了空格和跳格键的默认分隔符集。 
tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代的 for 本身。这会导致额外变量名称的分配。 
m-n格式为一个范围。通过 nth 符号指定 mth。 
如果符号字符串中的最后一个字符星号,那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。 
usebackq - 指定新语法已在下类情况中使用: 
在作为命令执行一个后引号的字符串并且一个单引号字符为文字字符串命令并允许在 filenameset中使用双引号扩起文件名称。
1. 如下命令行会显示当前目录下所有以bat或者txt为扩展名的文件名。 
a. 如下命令行会显示当前目录下所有包含有 e 或者 i 的目录名。 
b. 如下命令行会显示 E盘test目录 下所有以bat或者txt为扩展名的文件名。 
c. 如下命令行将产生序列 
d. 以下两句,显示当前的年月日和时间 
e. 把记事本中的内容每一行前面去掉8个字符 
:: 读取记事本里的内容(使用 delims 是为了把一行显示全,否则会以空格为分隔符) 
continue: 在 for 循环的最后一行写上一个标签,跳转到这位置即可 break: 在 for 循环的外面的下一句写上一个标签,跳转到这位置即可
测试网络联接状况以及信息包发送和接收状况。但是不能够测试端口。
-t 不停地向目标主机发送数据;
-a 以IP地址格式来显示目标主机的网络地址;
-l size 指定发送到目标主机的数据包的大小。
测试端口使用 telnet IP地址或主机名 端口,使用tcp协议的
b 是指定背景色的十六进制数字; f 指定前景颜色(即字体颜色)。 如果没有给定任何参数,该命令会将颜色还原到 CMD.EXE 启动时的颜色。 如果两参数一样,视为无效输入。只有一个参数时,设置字体。
产生随机数(正整数0~)
结束程序。即时是被调用的程序,结束后也不会返回原程序

分割字符串,以查看时间为例

%源字符串:~起始值,截取长度% (起始值从0开始;截取长度是可选的,如果省略逗号和截取长度,将会从起始值截取到结尾;
截取长度如果是负数,表示截取到倒数第几个。)
"%time:~0,5%" 显示"hh:mm"(即"11:04"),其中0表示从右向左移位操作的个数,5表示从左向右移位操作的个数
上面的字串分割格式,也可以用于其它地方,如目录路径:"%cd:~0,10%"
由于没有直接的字符串合并函数,只能用笨方法了。
没有现成的函数。如下程序利用 goto形成循环,不断将字符串截短1,并记录截短的次数,到字符串变成空时的次数即长度。
:: 判断str是不是空,如果不是则执行下边的语句
:: 算术运算,使num的值自增1,相当于num++或者++num语句
:: 截取字符串,每次截短1
:: 跳转到next1标签: 这里利用goto和标签,构成循环结构
:: 当以上循环结构执行完毕时,会执行下边的语句

截取字符串时,需要传递参数

删除一个文件或多个文件

将直接删除 本目录的 temp 目录的所有文件,没有任务提示 删除文件的时候可以使用“*”作通配符 将直接删除d:\test\log目录,如果log目录里面有文件将无法删除

删除一个非空目录 (必须指定目录名称)

必须指定目录名称,不能使用通配符 /S 除目录本身外,还将删除指定目录下的所有子目录 /Q 安静模式,带 /S 删除目录树时不要求确认 无论里面是否有文件或文件夹将全部直接删除 路径有空格时,可以用双引号括起来,也可以用空格替代
复制C的所有txt文件到D
所有gif扩展名改为jpg扩展名
提取当前目录下扩展名为mp3的文件名,输出到mp3文件名.txt
输出文件的绝对路径信息
}

批处理有着具有非常强大的字符串处理能力,其功能绝不低于C语言里面的字符串函数集。批处理中可实现的字符串处理功能有:截取字符串内容、替换字符串特定字段、合并字符串、扩充字符串等功能

下面对这些功能一一进行讲解。

  截取字符串可以说是字符串处理功能中最常用的一个子功能了,能够实现截取字符串中的特定位置的一个或多个字符。举例说明其基本功能:

  当然,上面的例子只是将字符串处理的基本功能展示出来了,还看不出字符串处理具体有什么用处。下面这个例子是对时间进行处理。

2、替换字符串   替换字符串,即将某一字符串中的特定字符或字符串替换为给定的字符串。举例说明其功能:

  对于上面的例子有一点说明,对比两个echo aa = %aa%可以发现,如果要修改变量aa的内容的话,就需要将修改结果“%aa:中国=中华人民共和国%”赋值给变量aa。上面的字符串截取也有着同样的特点。

  其实,合并字符串就是将两个字符串放在一起就可以了。举例说明:

  同样,如果要改变变量aa的内容的话,就需要将合并结果“%aa%%bb%”赋值给变量aa。

  “扩充”这个词汇来自于微软自己的翻译,意思就是对表示文件路径的字符串进行特殊的处理,具体功能罗列如下:
  %~fI - 将 %I 扩充到一个完全合格的路径名
  %~dI - 仅将 %I 扩充到一个驱动器号
  %~nI - 仅将 %I 扩充到一个文件名
  %~xI - 仅将 %I 扩充到一个文件扩展名
  %~sI - 扩充的路径只含有短名
  %~aI - 将 %I 扩充到文件的文件属性
  %~tI - 将 %I 扩充到文件的日期/时间
  %~$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩充
  到找到的第一个完全合格的名称。如果环境变量名
  未被定义,或者没有找到文件,此组合键会扩充到
  可以组合修饰符来得到多重结果:
  %~dpI - 仅将 %I 扩充到一个驱动器号和路径
  %~nxI - 仅将 %I 扩充到一个文件名和扩展名
  %~fsI - 仅将 %I 扩充到一个带有短名的完整路径名
  %~dp$PATH:i - 查找列在路径环境变量的目录,并将 %I 扩充
  到找到的第一个驱动器号和路径。
  以上内容引用于for /?帮助信息。其中的I代表变量I,不过需要说明的是,不是所有的变量都能够进行扩充的,有两个条件:1、该字符串代表一个文件路径;2、变量要用%x来表示,x可取a-z A-Z 0-9共62个字符中的任意一个。举例说明:

  其中的%0是批处理里面的参数,代表当前运行的批处理的完全路径。类似的还有%1-%9,分别代表传递来的第1-9个参数。例子如下:

  其中,变量aa在之前是不可以扩充的,通过call命令并将aa作为参数传递给子函数:deal,将aa变量转换成了变量%1,即符合%x格式,从而可以进行字符串扩充。
  至于%x中x取a-z A-Z的形式,可以复习一下for语句,for语句里面的变量就是用%x来表示的,因而可以直接进行扩充。

下面是其它网友的补充:注意是与c语言做了一些对比

首先说一下,批处理和高级语言不同,没有字符串处理函数,比如strcat之类的,但是却可以利用环境变量来实现这些函数的功能。
本文对照C语言中的字符串处理函数,讲解在批处理中的实现方法。

首先说一下字符串的存储,在C语言中,采用字符数组或者字符指针来存储字符串,而BAT中没有这些东东,所以要依靠环境变量来存储。
设置环境变量的语句为set语句,本文不详细介绍了,参考set /?语句。

1、C语中的strcpy函数,将一个字符串复制到另一个字符型指针或字符数组,覆盖原来的字符串。

C语言中的调用方法:strcpy(目标字符串,源字符串)

在批处理中的实现方法:

set 目标字符串=%源字符串%

2、C语中的strcat函数,将一个字符串连接到另一个字符型指针或字符数组的末尾。

C语言中的调用方法:strcat(目标字符串,源字符串)

在批处理中的实现方法:

set 目标字符串=%目标字符串%%源字符串%

3、字符串截取,C中没有这种函数,不过可以通过语句实现,不再介绍,直接说批处理的。

set 目标字符串=%源字符串:~起始值,截取长度%

注意,起始值从0开始!
截取长度是可选的,如果省略逗号和截取长度,将会从起始值一直截取到字符串的结尾。

4、C语中的strlen函数,取得字符串的长度。

C语言中的调用方法:strlen(字符串)

在批处理中的实现方法是利用goto和标签,形成循环结构,不断将字符串截短1字符,并用变量记录截短的次数,直到字符串变成空串。

5、C语中的strchr函数,在一个字符串中查找一个字符的首次出现位置,找到时返回所在位置,找不到时返回0值。

批处理中的思路:不断截短字符串,并取截短后字符串中的首字符,和要求的字符比较,如果相同就利用goto语句跳出循环,输出结果,如果没有相同的字符,执行到最后就输出0值。

最后出几道题,看看大家学习的怎么样!
(1)如何实现C语言中strstr函数的功能?
提示:strstr函数的功能是在字符串1中查找字符串2,找到时返回串2首次出现的位置,否则返回0值。与strchr区别就是,第二个参数是字符串,而不是字符了。

(2)如何用批处理构建while循环?
提示:while循环一般格式为:
其中,循环体为0条或多条语句,break用于跳出循环,continue用于直接判断表达式并决定是否进入下一次循环。
一般执行顺序:首先判断表达式,如果成立则进入循环,循环体执行完毕后再次判断表达式的值,决定是否再次循环。

提示:do-while循环一般格式为:
各个语句的解释参照while循环。
一般执行顺序:首先进入循环,循环体执行完毕后判断表达式的值,表达式成立则再次进入循环。

}

我要回帖

更多关于 cmd遍历全盘文件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信