将.text文件从第1行写入i

时间:2013-06-22 02:56:57

标签: regex windows batch-file cmd findstr

我非常接近我的回答,但似乎无法找到它。 我在批处理文件中使用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上编写一个应用程序,我很难搞清楚如何完成这个过程。我目前正在让应用程序运行在应用程序中编写的批处理文件。

2 个答案:

答案 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,请解释)
  • “file pattern”=要查找的文件,例如。 “* class.asasm”
  • starting_line =搜索起始行,例如。 7(more +6
  • “搜索字符串”=您的搜索模式,例如。 “桌面”
    • 或搜索“桌面制作功能”
    • 并搜索|findstr "Desktop"|findstr "Production"|findstr "Capabilities"