Batch file 文本文件中的自定义搜索

Batch file 文本文件中的自定义搜索,batch-file,Batch File,我有一个包含以下内容的文本文件: process.exe Pid:4513 G:\data\Windows process.exe Pid:6754 G:\data\Linux process.exe Pid:4328 G:\data\MacOS 我想要一个批处理脚本,它: Searches for 1st occurrence of 'process.exe' and then searches for 1st occurrence of any one of the 'Windows/Li

我有一个包含以下内容的文本文件:

process.exe Pid:4513
G:\data\Windows
process.exe Pid:6754
G:\data\Linux
process.exe Pid:4328
G:\data\MacOS
我想要一个批处理脚本,它:

Searches for 1st occurrence of 'process.exe' and then searches for 1st occurrence of any one of the 'Windows/Linux/MacOS' word and let's assume Windows word found then send the following output to a text file 'Output.txt' :
process.exe  Pid:4513  Windows

Then searches for 2nd occurrence of 'process.exe' and then searches again for 1st occurrence of any one of the 'Windows/Linux/MacOS' word and let's assume Linux word found then send the following output to the same text file 'Output.txt' :
process.exe  Pid:6754  Linux

and so on..
最后,“Output.txt”文件应包含以下内容:

process.exe  Pid:4513  Windows
process.exe  Pid:6754  Linux
process.exe  Pid:4328  MacOS

虽然这个问题并没有严格遵守规则,因为你自己并没有试图解决这个问题,这也不是一个免费为我写代码的网站;我相信,寻求类似问题解决方案的人可能希望得到一个答案:

@ECHO OFF
SETLOCAL
SET "keystring1="
(
 FOR /f "delims=" %%a IN (
  q19366050.txt
  ) DO (
  ECHO %%a|FIND "HsvDataSource.exe" >NUL
  IF NOT ERRORLEVEL 1 SET keystring1=%%a
  FOR %%b IN (USHFMPROD GSPROD TLPROD) DO (
   ECHO %%a|FIND "%%b" >NUL
   IF NOT ERRORLEVEL 1 IF DEFINED keystring1 CALL ECHO(%%keystring1%% %%b&SET "keystring1="
  )
 )
)>newfile.txt
TYPE newfile.txt
GOTO :EOF
数据应在q19366050.txt中,报告应在newfile.txt中生成。调整以适合你自己


修改速度20131028T0725Z

@ECHO OFF
SETLOCAL
SET "keystring1="
(
 FOR /f "delims=" %%a IN (
  q19366050.txt
  ) DO (
  ECHO %%a|FIND "HsvDataSource.exe" >NUL
  IF ERRORLEVEL 1 (
   IF DEFINED keystring1 (
    FOR %%b IN (USHFMPROD GSPROD TLPROD) DO IF DEFINED keystring1 (
     ECHO %%a|FIND "%%b" >NUL
     IF NOT ERRORLEVEL 1 CALL ECHO(%%keystring1%% %%b&SET "keystring1="
    )
   )
  ) ELSE (SET keystring1=%%a)
 )
)>newfile.txt
TYPE newfile.txt
GOTO :EOF
这里似乎奇怪的是,如果定义了按键串1,则多次使用

第一个实例确保
的内部
仅在找到可执行文件后执行

下一个实例确保在找到
%%b
后,不会对剩余的目标字符串执行耗时的管道回显

如果按频率顺序列出目标字符串,则会有轻微的进一步改进,因此,如果字符串在60%/30%/10%的时间内出现,则在60%的时间内仅执行1
ECHO
;2
ECHO
s30%和3
ECHO
s10%


样本数据的实际运行时间(我不记得是从哪里得到的…)对于原始版本是80秒,对于这个版本是34秒;使用99K sourcetext运行。

您的编程问题是?嗨,Peter..作为批处理脚本和本网站的新用户,老实说,我不知道规则。但我肯定会从现在开始处理这件事。感谢您的回复…我尝试了您的代码,但它引发了以下错误:请参阅所附的“错误消息”图片。您已经发现如何从命令提示符下操作。批处理文件的思想是有一个包含批处理指令的文本文件。这样,您就可以轻松地编辑它,而不必重复键入。将批处理文件剪切并粘贴到名为
whateveryoulike.bat的文件中即可,但要小心,因为它可以尝试格式化文本,批处理对语法非常敏感。我使用EDITPLUS。文件需要保存在
路径上
(如果您在提示符下输入
PATH
,您将得到一个分号分隔的目录列表。您可以使用
PATH EDITOR
调整路径,然后您只需在提示符下输入
whateyoulike
即可执行批处理文件。不过,有一个小问题-在批处理文件中,有一个元变量(循环控制变量)被指定为
%%x
,而从提示中,它是
%x
。EDITPLUS和路径编辑器-谷歌是你的朋友…批处理程序通常为批处理文件设置一个特殊目录。
C:\batch
C:\belfry
很受欢迎。只需将该目录添加到你的路径中。非常感谢Peter..EDITPLUS和路径编辑器重新设置ally让它顺利运行…我必须说,批处理脚本对我来说是一个健康的开始…我将继续学习!!谢谢..@Magoo..为什么这个脚本需要更多的时间来提供输出..?:)