我非常接近我的回答,但似乎无法找到它。 我在批处理文件中使用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:我需要想办法让findtr向后搜索第三个字符串的第四个字符串
任务2:我需要在results2.txt中写入第1行 - 我们到达文件的第1行 插入.txt文件。然后写下剩下的原始行。
我正在用Visual Studio在VB.Net上编写一个应用程序,我很难搞清楚如何完成这个过程。我目前正在让应用程序运行在应用程序中编写的批处理文件。
答案 0 :(得分: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行上获取文字(否则,头部和尾部会很好),你可以生成一个类似的循环,但将FINDSTR中的代码替换为IF语句的末尾,并将_LINENO与其他变量进行比较,如果它在两个值之间,则对该行进行ECHO。我不知道IF是否支持逻辑运算符,因此您可能必须嵌套IF语句,如
IF !_LINENO! GEQ %START_LINE% IF !_LINENO! LEQ %END_LINE% @ECHO %%l
答案 1 :(得分:2)
假设你需要这个(来自你的第一条评论):
我仍然没有找到一种方法从xx行开始搜索而不是1或以相反的顺序搜索
你可以尝试这个(从命令行):
for /r %i in ("file pattern") do @more "%~i" +starting_line |findstr "search string"
for /r
=递归(如果你的意思是reverse
,请解释)starting_line
=搜索起始行,例如。 7(more +6
)|findstr "Desktop"|findstr "Production"|findstr "Capabilities"