[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

回复 7楼 的帖子

抱歉,刚上来.
回答一下7 10楼的疑问:
if ... else if .... else if ..... else  .. 这样的句式 看起来很长,但它其实是一条命令。只会执行一次。就是说执行了set flag=1 以后(或中间某段),不管后边是什么都被跳过。进入a.txt 的下一行。到了下一行后把该行显示出来。
但是如果是:
if ...()
if ...()
这种就不一样了。执行完第一个if .会接着执行第二个if . (相当对同一行内容执行了两个命令),所以第二个if 直接把当前行给打印出来了,而不是下一行。

如果是多个关健字的话。少数的有限的几个的话,可以再多加几个 else if .比如增加 defg 为关健字.可以这样写.

if "%%a"=="abcd" (set flag=1) else if "%%a"=="defg" (set flag=1) else if !flag!==1 (set flag=0&echo;%%a)

如果关健字很多的话。可以把关健字存放到另一个文件。比如b.txt 中。然后用for 取出b.txt作为变量。再代放abcd处判断。 如果要取abcd 前一行或N行。或取abcd 下一行或N行。都是可以实现的。

关健在于实际需求来写代码。

所以,请楼主把问题补全更新到顶楼。 论坛高手很多。 看看大家有没有更好的,更简洁巧妙的思路。

[ 本帖最后由 inittab 于 2009-9-18 18:40 编辑 ]

TOP

明白了,谢谢。

另外麻烦Lumiere能讲一下你最后写的代码,好像有错

TOP

回复 15楼 的帖子

刚才我的代码有个小瑕疵,就是第二个for结束以后还会再执行一次下面的end 部分,我写的时候没注意到,只要在第一个for之后加一句exit就可以了,或者在第二个for之后加2>nul也可以,因为这个错误不会影响执行结果,2>nul的意思就是将错误输出屏蔽。至于call :end 加参数是call的基本句式之一,后面的!n!参数可以传递给下面的%i。比如call :example n1 n2 就带了两个参数,这样就可以再后面设置两个参数%1 %2.以此类推。
Still with wax

TOP

回复 11楼 的帖子

我还是有点看不懂,在论坛搜了  CALL关于参数的,没找到,所以理解不过来,麻烦你讲解一下,谢谢

skip=%1  为什么这里会有%1,     CALL  :END  !n!   后面的!n!是参数,是代表什么呢,就这两个不理解

TOP

  1. @echo off
  2. call :end 1 2 3
  3. :end
  4. echo %1
  5. echo %2
  6. echo %3
  7. pause
复制代码
保存 运行下  你就知道什么是什么意思了

TOP

[attach]1863[/attach]
1

评分人数

TOP

回复 19楼 的帖子

这里借用C++里面参数调用的说法,就是将call还有标签后面的实参传递到要调用的代码段中%1 %2 %3 等等代表的形参中去。20已经给出很明朗的代码,如果楼主还不懂的话,那我也爱莫能助了。
Still with wax

TOP

明白了,谢谢楼上几位朋友

TOP

返回列表