1

我非常接近我的答案,但我似乎找不到它。我在批处理文件中使用 Findstr 函数现在将整个目录缩小到一个文件。

cd ...
findstr /s /m "Desktop" *class.asasm >results1.txt
findstr /m /f:results1.txt "Production" *class.asasm >results2.txt
findstr /n /f:results2.txt "Capabilities" *class.asasm >results3.txt

任务 1:我需要想办法让 findstr 从找到第三行的行号向后搜索第四个字符串

任务 2:我需要在 results2.txt 中写入文件的第 1 行 - 插入一个 .txt 文件。然后写下其余的原始行。

我正在使用 Visual Studios 在 VB.Net 中编写一个应用程序,我很难弄清楚如何完成这个过程。让应用程序运行在应用程序中编写的批处理文件,我目前有更好的运气。

4

2 回答 2

2

假设您需要这个(来自您的第一条评论):

我仍然没有找到从第 xx 行而不是第 1 行开始搜索或以相反顺序搜索的方法

你可以试试这个(从命令行):

for /r %i in ("file pattern") do @more "%~i" +starting_line |findstr  "search string"
  • for /r=递归(如果你的意思是真的reverse,请解释)
  • “文件模式”=要查找的文件,例如。“*class.asasm”
  • starting_line= 搜索起始行,例如。7 ( more +6)
  • “搜索字符串” = 您的搜索模式,例如。“桌面”
    • 或搜索“桌面生产能力”
    • 和搜索|findstr "Desktop"|findstr "Production"|findstr "Capabilities"
于 2013-06-22T06:47:21.493 回答
2

正确的解决方案是找到一个可以正确执行此操作的工具。批处理/CMD 没有。

这是一个脚本,它告诉您第 3 和第 4 匹配的行号。这可能不是您想要的,但它展示了如何有效地使用行号。

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

SET FILE=TestFile.txt

SET _LINENO=1
SET _MATCHNO=0
SET _THIRDLINENUM=
SET _FOURTHLINENUM=
FOR /F %%l IN (%FILE%) DO (
   ECHO %%l | FINDSTR "Target" %_TMP% >NUL
   IF NOT ERRORLEVEL 1 (
      SET /A _MATCHNO=!_MATCHNO!+1
      IF !_MATCHNO!==3 SET _THIRDLINENUM=!_LINENO!
      IF !_MATCHNO!==4 SET _FOURTHLINENUM=!_LINENO!
   )
   SET /A _LINENO=!_LINENO!+1
)

@ECHO %_THIRDLINENUM% : %_FOURTHLINENUM%

这是 TestFile.txt 中的内容

abcdefg
bcdefgh
Target 1
cdefghi
defghij
fghijkl
Target 2
ghijklm
hijklmn
ijklmno
jklmnop
klmnopq
lmnopqr
mnopqrs
Target 3
nopqrst
Target 4
opqrstu
pqrstuv
qrstuvw
rstuvwx
stuvwxy
tuvwxyz

如果您坚持使用批处理/CMD(有时在没有其他可用的情况下我会这样做),并且您需要在第 #n 行获取文本(否则,head 和 tail 就可以了),您可以产生类似的循环但是将 FINDSTR 中的代码替换为 IF 语句末尾的代码,将 _LINENO 与其他变量进行比较,如果它在两个值之间,则 ECHO 行。我不知道 IF 是否支持逻辑运算符,因此您可能必须嵌套 IF 语句,例如

IF !_LINENO! GEQ %START_LINE% IF !_LINENO! LEQ %END_LINE% @ECHO %%l
于 2013-06-22T05:59:38.973 回答