0

我有两个代码,但第 5 部分在与第 4 部分不同的文件中抓取了错误的变量。

part4 使用 var4,part5 使用 var5。我希望 var5 在 "skip=2 tokens=2 delims==" 下被抓取 2 行,但由于某种原因,在第 5 部分中引用 findstr 时我不能跳过行。第 5 部分是所有需要更改的部分,第 4 部分很好。

所以从本质上讲,我如何让 part5 在 part4 的 findstr 下方获取变量两行?

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
)
)

例子:

如果第 4 部分发现“船沉了!” 在这个文件中(沉船!在第一行):

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

我希望第 5 部分将变量设为 19400112(“日期 =”之后的第三行)。“Date=”之后的部分在 part4 变量下面两行

4

1 回答 1

0

虽然我不完全理解您的代码,但我可以在上面看到这些详细信息:

  • 在第 4 部分中,您findstr首先执行以了解目标文本是否存在于文件中,然后再次执行以获取某些数据(我不知道这是什么数据)。您可能findstr只需执行一次即可完成这两项任务。

  • 你说你想要 part5在 part4 的 findstr 下两行抓取一行,但是你没有以任何方式将 part4 的结果连接到 part5 内!"skip=2part5 与 part4 的 findstr 没有关系(skip=2 与什么有关?默认为第一行)。你需要从part4中获取一个行号,然后在part5中作为“skip=”使用,并附加一个“+2行”,即“+1 skip”。

下面的批处理文件在您的示例数据文件上实现此过程:

@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 回答