2012-02-07 29 views
1

我目前正在使用带有SET命令的批处理文件从一组名为link.2011*.log的日志文件中执行findstr,但在尝试回显日志文件时遇到问题。批量使用集

代码:

... 
set /P log=.\DIR\%DEV%\link.2011*.log 
findstr /L /C:"matrix" %log% 
if errorlevel 1 (
echo %DEV% --- matrix not found >> .\output.txt 
) else (
echo %DEV% --- matrix found %log% >> .\output.txt 
:END 

output.txt不打印%dev%变量,但%log%可变输出整个字符串.\DIR\%DEV%\link.2011*.log

我想代码输出的实际link.2011xxxxxxxx.log而不是字符串。

任何帮助表示赞赏。

谢谢。

+1

我不明白'设置/ P日志=。\ DIR \%DEV%\ link.2011 * .log'应该这样做。在我的系统上,将'。\ DIR \%DEV%\ link.2011 * .log'作为“提示符”写入控制台,如果用户键入响应的内容,则将其保存为变量'%log% '。有什么系统可以完成不同的事情吗? – ruakh 2012-02-07 18:57:20

+0

@ruakh - 我的想法是使用set命令从目录中选择每个日志文件,并使用%log%变量来为特定字符串findstr。不知道这是否回答你的问题。如果你正在通过命令窗口寻找用户交互,那么我想我可能已经看到它在某个地方在stackoverflow中,只是搜索它。 – redsu 2012-02-08 16:07:04

回答

0

如果使用/M开关与FINDSTR命令,输出将只显示在比赛已经发生了文件(S)的姓名(或名称):如果你想输出

FINDSTR /M /L /C:"matrix" "%log%" >> .\output.txt 

是完全一样在你的示例脚本,你可以试试下面的办法:

FINDSTR /M /L /C:"matrix" "%log%" > .\tmpoutput.txt && (
    ECHO %DEV% --- matrix found: >> .\output.txt 
) || (
    ECHO %DEV% --- matrix not found >> .\output.txt 
) 
TYPE .\tmpoutput.txt >> .\output.txt 
DEL .\tmpoutput.txt 

也就是说,该字符串的FINDSTR命令搜索和文件列表输出到一个临时文件。如果搜索成功,则matrix found消息将打印到.\output.txt,否则matrix not found会执行此操作。

之后,.\tmpoutput.txt的内容被附加到output.txt。 (如果没有匹配,你可以不用担心这一步的完成,因为在这种情况下临时文件将是空的,所以它不会影响output.txt的内容。)

+0

谢谢安德烈。非常感激。 – redsu 2012-02-08 12:26:13

+0

又回来了,我还有一个关于脚本的问题。例如,我在。\ TEMP \ *。logs中有一个* .logs的列表,我想每个日志都找到它的“矩阵”。但是我想要output.txt显示字符串矩阵(如果找到)以及它找到的日志名称。再次感谢Andriy。 – redsu 2012-02-08 14:52:44

+0

@redshogun:如果没有'/ M','FINDSTR'显示文件名和匹配发生的实际行。格式是:'filename:line'。只需单独尝试命令即可自行查看。 (你也会看到文件名被突出显示,如'FINDSTR'本身所示,但突出显示在重定向输出后被取消。) – 2012-02-08 15:11:30