1

私は自分の答えに非常に近いですが、それを見つけることができないようです。バッチ ファイルで Findstr 関数を使用して、ディレクトリ全体を 1 つのファイルに絞り込みました。

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: 3 行目が見つかった行番号から 4 番目の文字列を検索するように findstr を逆方向に検索する方法を見つける必要があります。

タスク 2: .txt ファイルを挿入する、results2.txt 内のファイルの 1 行目に到達する行を記述する必要があります。次に、元の行の残りを書きます。

Visual Studio を使用して VB.Net でアプリケーションを作成していますが、このプロセスを完了する方法を理解するのに苦労しています。私は現在、アプリケーション内に記述されたバッチ ファイルをアプリケーションで実行することで、うまくいっています。

4

2 に答える 2

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 を他の変数と比較するものに置き換え、2 つの値の間にある場合は行を ECHO します。IF が論理演算子をサポートしているかどうかはわかりません。そのため、次のように IF ステートメントをネストする必要がある場合があります。

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

これが必要だと仮定すると(最初のコメントから):

1 行目ではなく xx 行目から検索する方法や、逆順に検索する方法がまだ見つかりません。

これを試すことができます(コマンドラインから):

for /r %i in ("file pattern") do @more "%~i" +starting_line |findstr  "search string"
  • for /r= 再帰的に (本当の意味ならreverse説明してください)
  • 「ファイルパターン」=検索するファイル。「*class.asasm」
  • starting_line= 検索開始行。7 ( more +6)
  • 「検索文字列」 = 検索パターン。"デスクトップ"
    • または「デスクトップ制作能力」で検索
    • AND検索|findstr "Desktop"|findstr "Production"|findstr "Capabilities"
于 2013-06-22T06:47:21.493 に答える