Board logo

标题: [讨论]利用FOR命令匹配文本内容,如此代码可以么? [打印本页]

作者: qingzangbasin     时间: 2006-12-23 21:45    标题: [讨论]利用FOR命令匹配文本内容,如此代码可以么?

autorun.inf只存在于根目录中。
其内容为固定格式:
[autorun]
open=sxs.exe
shell/auto/command=sxs
shell=auto
或者
[autorun]
open=sxs.exe -r
shell/auto/command=sxs.exe -r
shell=auto
或者
[autorun]
open=c:\sxs.exe -r
shell/auto/command=c:\sxs.exe -r
shell=auto

我的目的是截取sxs.exe,以及其路径(这个代码中暂时不需要路径)
------------------------------------
set "alldriver=c d e f g h"
set "vir=sxs.exe command.com ravmone.exe autorun.bat"
for %%i in (%alldriver%) do (
        if exist %%i:\autorun.inf (
                attrib -r -s -h %%i:\autorun.inf
                for %%j in (%vir%) do (
                        echo %%j >>temp.txt
                        for /f "skip=1 tokens=2 delims== " %%k in (%%i:\autorun.inf) do (
                                echo %%~nxk----%%j >>temp.txt
                                if "%%~nxk"=="%%j" echo success >>temp.txt
                        )
                )
        )
)
[ Last edited by qingzangbasin on 2006-12-23 at 08:47 AM ]
作者: namejm     时间: 2006-12-24 03:22
  只读取文本内容的话,无须对属性进行操作。给你一段演示代码(为了防止路径或文件名中带有特殊字符,所以在结果中加上了引号,以提高兼容性,可视具体情况决定是否采用引号):
@echo off
for %%i in (c d e f g h) do (
    for /f "skip=1 tokens=2 delims==-" %%j in (%%i:\autorun.inf) do echo "%%~fi" "%%~nxi"&goto end
)
:end
pause
[ Last edited by namejm on 2006-12-23 at 02:59 PM ]
作者: qingzangbasin     时间: 2006-12-25 00:14


  Quote:
Originally posted by namejm at 2006-12-23 02:22 PM:
  只读取文本内容的话,无须对属性进行操作。给你一段演示代码(为了防止路径或文件名中带有特殊字符,所以在结果中加上了引号,以提高兼容栮..

谢谢斑竹的代码,如何进一步匹配AUTORUN.INF中提取的内容呢?
作者: namejm     时间: 2006-12-25 00:25
  匹配内容具体指什么,请详细说明一下。
作者: qingzangbasin     时间: 2006-12-25 00:41


  Quote:
Originally posted by namejm at 2006-12-24 11:25 AM:
  匹配内容具体指什么,请详细说明一下。

获取AUTORUN.INF中的字符后,匹配
set "vir=sxs.exe command.com ravmone.exe autorun.bat"
这里的字符
作者: namejm     时间: 2006-12-25 01:30
  不懂你在说什么。请把要求详细清晰地描述一下:获取到什么字符?何为匹配?……
作者: qingzangbasin     时间: 2006-12-25 10:33


  Quote:
Originally posted by namejm at 2006-12-24 12:30 PM:
  不懂你在说什么。请把要求详细清晰地描述一下:获取到什么字符?何为匹配?……

呵呵,版主对我的代码视而不见

目的就是利用FOR获取AUTORUN.INF中的调用程序,然后判断是否和定义的
set "vir=sxs.exe command.com ravmone.exe autorun.bat"
字符串匹配。
作者: namejm     时间: 2006-12-25 11:38
  不是我视而不见,而是你所谓的 匹配 让我感到无法理解:什么叫匹配?完全一样?还是只要是其中的一个?set "vir=sxs.exe command.com ravmone.exe autorun.bat" 显然让人不知所措。你在7楼的描述我仍然看不明白,因为你还是用了 匹配 二字。要想让别人给出准确的代码,就得把自己的意思准确表达到位,不要让人感到无所适从或者歧义丛生。
作者: qingzangbasin     时间: 2006-12-25 11:52


  Quote:
Originally posted by namejm at 2006-12-24 10:38 PM:
  不是我视而不见,而是你所谓的 匹配 让我感到无法理解:什么叫匹配?完全一样?还是只要是其中的一个?set "vir=sxs.exe command ...

还是谢谢您的关注,我基本解决了问题。:)
以后在学习批处理的同时加强语言功底:)
作者: zh159     时间: 2006-12-25 13:34
LZ应该是把set "vir=sxs.exe command.com ravmone.exe autorun.bat"作为一个“库”的方式保存要匹配的内容,利用for %%j in (%vir%) do (......的方式逐一比对%vir%的变量“库”“sxs.exe command.com ravmone.exe autorun.bat”中的一个文件名。
只是没有表达清楚