批处理按指定符号分割提取数据字符串?

重新来一个,把判断范围缩小点靠得住些,呵呵

我是说我的My.reg文件中有这么一行字符串:
晕了··· 大侠我是真不懂了
给你看看我根据你上次帮忙写的更改的:

我现在想在这个基础上 把原来指定的“S-1-5-21--“
换成同样是在My.reg中获取的。
请您再次指点一下! 不胜感激!

补充一下,第一种是在循环内处理,如果只需要截取SID而不需要在循环内处理,就用第二种

我明白你的意思,第一种第二种方法不管你的字符串什么内容,都只会截取第一个\和第二个\之间的数据,不管你是什么SID,只要在两个\字符中间的就截取出来,自己试试就明白了

补充一下,第一种是在循环内处理,如果只需要截取SID而不需要在循环内处理,就用第二种

我是说我的My.reg文件中有这么一行字符串:
但是这行字符串中 “S-1-5-21--“不是一个常量,而是一个变量,具体的值取决于我开发的机器,所以我现在要取出“S-1-5-21--”这个位置的字符串。

补充一下,第一种是在循环内处理,如果只需要截取SID而不需要在循环内处理,就用第二种

那就用第一种或者第二种

第一种和第二种最准确,第三种也可以,因为SID-500是定长的

}

身份认证 购VIP最低享 7 折!

字符文本中的字符太多的解决办法,希望能帮你们解决同样的问题!

}

批处理文件是无格式的文本文件,本质就是一堆DOS命令按一定顺序排列而形成的集合, 它英文译为BATCH,文件扩展名为 .bat 或 .cmd。在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用) do echo %%I

保存为批处理文件并执行,将会在弹出的批处理窗口中看到这样的信息:
请按任意键继续...很快地,你会觉得这个for语句是如此的简单,简单到你丝毫感受不出它的强大:这个for语句,和我直接用echo语句没什么两样啊!

是的,演示代码永远都只是演示而已,就像大多数高级语言的教科书一样,在引导新手学习的时候,基本上都是千篇一律地告诉大家如何编写一个能显示 hello world! 的窗口,从这些演示代码中,你看不到它们具有多少实用性,你只是感到有点好奇:咦,居然弹出了一个窗口?片刻之后,你就会觉得索然无味。

那好吧,为了让大家对for更加感兴趣,我们先来分析一下for语句的一些注意事项,之后,再让大家看看更为强大的for语句实例。


1、 for语句的形式变量I,可以换成26个字母中的任意一个,这些字母会区分大小写,也就是说,%%I和%%i会被认为不是同一个变量;形式变量I还可以换 成其他的字符,但是,为了不与批处理中的%0~%9这10个形式变量发生冲突,请不要随意把%%I替换为%%0 ~%%9中的任意一个;
2、in和do之间的command1表示的字符串或变量可以是一个,也可以是多个,每一个字符串或变量,我们称之为一个元素,每个元素之间,用空格键、跳格键、逗号或等号分隔;
3、for语句依次提取command1中的每一个元素,把它的值赋予形式变量I,带到do后的command2中参与命令的执行;并且每次只提取一 个元素,然后执行一次do后的命令语句,而无论这个元素是否被带到command2中参与了command2的运行;当执行完一次do后的语句之后,再提 取command1中的下一个元素,再执行一次command2,如此循环,直到command1中的所有元素都已经被提取完毕,该for语句才宣告执行 结束;其中,第3点是最为关键的,它描述了for语句的执行过程,是for语句的精髓所在,大家一定要牢记这一条,才能深刻理解更为复杂的for流程。

有了以上的基础,我们再来看一个例子,这个例子修改了example1的部分内容,结果将大不一样:

和example1的执行结果相比,example2发生了如下变化:

1、显示结果分成了3行(不算最后一行中文提示);
2、每一行都从逗号处被切分;

如果把 这个字符串中的点号换为空格、跳格或等号,执行结果将和example2的执行结果别无二致。

现在,我们来分析一下example2代码中for语句的执行过程:

首先,for语句以逗号为分隔符,把 bbs,bathome,cn 这个字符串切分成三个元素:bbs、bathome和cn,由此决定了do后的语句将会被执行3次;
然后,第一次执行过程是这样的:先把 bbs 这个字符串作为形式变量I的值,带入do后的语句中加以执行,也就是执行 echo %%I 语句,此时的I值为bbs,因此,第一次执行的结果,将会在屏幕上显示bbs这个字符串;第二次执行和第一次执行的过程是一样的,只不过此时I的值已经被替换为command1中的第二个元素了,也就是 bathome 这个字符串;如此循环,当第三次echo执行完毕之后,整条for语句才算执行完毕,此时,将执行下一条语句,也就是pause命令。

其实,这个例子只比上一个例子多了一点花样,有趣了那么一点点:一条for语句的执行结果居然被分成了3行!

应该明确的是,for不是一个简单的命令,它的用法比较复杂,它还可以带四个参数(/L /D /R /F),其中:/L和/F参数是最经常用到的。当然,它本身也可以不带参数,下面我们通过具体的例子来讲解for的运用。

一、不带参数的for:

将以上代码保存为批处理文件(如何保存?),然后运行,可以发现屏幕上显示1 2 3 4 5(每字一行)
是不是明白了一些?它的整个运行机制我们可以这样看:for不停的从括号中拿出5个“东西”来(以空格做间隔),并将这5个“东西”依次传给临时变量%%i,同时把这个变量echo出来....

从这个例子我们可以看出,for的基本用法是:

变量常用%%i 来表示,当然也可以换成%%j;目标就是待处理的对象集合,比如这里的1 2 3 4 5;这里的干什么的内容为:批处理命令。

二、带参数 /L 的for (这里的 参数/L 可以理解为 "list" 的意思,代表一个数列)

它的意思和上面的意思差不多,但是括号中的对象却不需要 写成 1 2 3 45 的形式了,而是:1 1 5,因为它启用了参数 /L ,就是告诉for,这个括号里的对象是个数列,怎样的数列?就是以 1 开始,步长 为1 ,结束值为5的一个等差数列,再举个实例:

三、for的 /D 和/R 参数(这两个参数个人比较少用)
1>/D参数(常用来查询 当前目录 或者 指定目录的文件夹)
如:查询F盘根目录下的文件夹

如果省略 括号中的 "f:\",则会直接查询 批处理 所在目录的文件夹
假设 本批处理文件 保存在:F:\test下
运行以下批处理代码,将会查询 F:\test下的文件夹

枚举F:盘下所有的 .bat文件(包括子目录),则:

如果省略以上代码中的F:\,则会列举当前目录所有符合(set)的文件
如:列举批处理所在目录的 所有 批处理文件(包括子目录)

四、带参数 /f 的for(这里的参数/F可以理解为“file”的意思,代码处理对象为文本串)
for /f 参数最为复杂,难懂和常用.
在刚学时确实费了我不少脑筋,下面就我个人的理解,给新手们通俗的讲讲,也好让新手少走些弯路.

以默认方式,/F 通过每个文件的每一行中分开的第一个空白符号。跳过空白行。可通过指定可选"options"参数替代默认解析操作。这个带引号的字符串包括一个或多个指定不同解析选项的关键字:

eol=c - 指一个行注释字符的结尾(就一个)
skip=n - 指在文件开始时忽略的行数。
delims=xxx - 指分隔符集,替换空格和跳格键的默认分隔符集。(常用命令)
tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代的 for 本身。这会导致额外变量名称的格式为一个范围。通过 nth 符号指定 m符号字符串中的最后一个字符星号,那么额外的变量将在最后一个符号解析之分配并接受行的保留文本。
usebackq - 指定新语法已在下列情况中使用:在作为命令执行一个后引号的字符串并且引号字符为文字字符串命令并允许在 fi中使用双引号扩起文件名称。

以下就是几个常用命令的返回值及其代表的意义:
2 文件共享冲突阻止备份完成
4 由于致命的错误使备份操作中止

2 用户通过ctrl-c中止比较操作
3 由于致命的错误使比较操作中止

2 用户通过ctrl-c结束拷贝操作
3 因致命的处理错误使盘拷贝中止
4 预置错误阻止拷贝操作

2 用户通过ctrl-c中止拷贝操作
4 预置错误阻止文件拷贝操作
5 拷贝过程中写盘错误

}

我要回帖

更多关于 批处理判断字符串 的文章

更多推荐

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

点击添加站长微信