0

2 つのコードがありますが、part5 が part4 とは別のファイルで間違った変数を取得しています。

part4 は var4 を使用しており、part5 は var5 を使用しています。var5 を 2 行下の "skip=2 tokens=2 delims==" で取得したいのですが、なぜか part5 で findstr を参照するときに行をスキップできません。変更する必要があるのはパート 5 だけです。パート 4 は問題ありません。

つまり、本質的に、part4のfindstrの2行下の変数をpart5に取得するにはどうすればよいですか?

SETLOCAL ENABLEDELAYEDEXPANSION

:part4
set var4=
findstr /m "Ship sunk!" "C:\Users\P Ditty\Documents\SH3\data\cfg\Backups_SCR2\*.clg" "C:\Users\P         Ditty\Documents\SH3\data\cfg\Backups_SCR2\Log_*.cfg"
if not errorlevel 1 (
for /f "tokens=4 delims==,|" %%D in ('findstr "Ship sunk!" "C:\Users\P Ditty\Documents\SH3       \data\cfg\Backups_SCR2\*.clg" "C:\Users\P Ditty\Documents\SH3\data\cfg\Backups_SCR2\Log_*.cfg"') do (
set var4=!var4!%%D
 goto :eof
)
)

:part5
findstr "Ship sunk!" "C:\Users\P Ditty\Documents\SH3\data\cfg\Backups_SCR2\*.clg" "C:\Users\P  Ditty\Documents\SH3\data\cfg\Backups_SCR2\Log_*.cfg"
if not errorlevel 1 (
for /f "skip=2 tokens=2 delims==" %%E in ('findstr "Ship sunk!" "C:\Users\P Ditty\Documents\SH3\data\cfg\Backups_SCR2\*.clg" "C:\Users\P Ditty\Documents\SH3\data\cfg\Backups_SCR2\Log_*.cfg"')  do     (
set var5=
set var5=!var5!%%E
goto :eof
)
)

例:

part4 見つけたら「沈没船!」このファイルで (Ship sunk! は最初の行にあります):

asdfasfdasdfShip sunk! asdfjaslkjf;ajfa;
aksdfjklasjflk; fnwerawra
Date=19400112

part5は19400112("Date="の次の3行目)の変数にしてほしいです。part4 変数の 2 行下の "Date=" より後の部分

4

1 に答える 1

0

私はあなたのコードを完全には理解していませんが、以下の詳細を見ることができます:

  • パート 4 ではfindstr、ターゲット テキストがファイルに存在するかどうかを確認するために最初に実行し、次にそれを再度実行して特定のデータを取得します (これがどのデータであるかはわかりません)。findstr両方のタスクを達成するために 1 回だけ実行することができます。

  • part5 で part4 の findstr の2 行下の行を取得したいと言っていましたが、part4 の結果を part5 内に接続していません。part5の"skip=2は、part4 の findstr とは何の関係もありません (何に対してskip=2 ですか? デフォルトは最初の行です)。part4 から行番号を取得し、それを part5 の「skip=」として使用し、さらに「+2 行」、つまり「+1 スキップ」する必要があります。

以下のバッチ ファイルは、サンプル データ ファイルでこのプロセスを実現します。

@echo off
:part4
set var4=
rem Get the LINE NUMBER where the findstr happen
for /f "tokens=1 delims=:" %%D in ('findstr /N "Ship sunk!" "inputFile.txt"') do (
   set var4=%%D
)
:part5
rem Get the number of two lines below (that is, skip=line+1)
set /A skip=var4+1
rem If text found in part4
if defined var4 (
   rem Get that line from the file (NOT from findstr)
   for /f "skip=%skip% tokens=2 delims==" %%E in (inputFile.txt) do (
      set var5=%%E
      goto continue
   )
)
:continue
echo %var5%

アントニオ

于 2013-03-23T01:06:38.793 に答える