我有两个代码但是part5正在使用与part4不同的文件中的错误变量。
part4使用var4,part5使用var5。我希望var5被抓下2行“skip = 2 tokens = 2 delims ==”但由于某种原因,我在参考part5中的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
)
)
示例:
如果part4发现“船沉没!”在这个文件中(Ship sunk!在第一行):
asdfasfdasdfShip sunk! asdfjaslkjf;ajfa;
aksdfjklasjflk; fnwerawra
Date=19400112
我想将part5变为19400112(“Date =”之后的第三行)。 “Date =”在part4变量
之下的两行之后的部分答案 0 :(得分:0)
虽然我不完全理解您的代码,但我可以在其上看到这些细节:
在第4部分中,首先执行findstr
只是为了知道目标文本是否存在于文件中,然后再次执行以获取某些数据(我无法理解什么数据是这个)。您可以只执行一次findstr
来完成这两项任务。
你说你想要part5在part4的findstr 下面的两行中获取一行,但是你没有以任何方式连接part5中part4的结果!第5部分中的"skip=2
与part4的findstr无关(skip = 2相对于什么?默认是第一行)。您需要从part4获取行号,然后在第5部分中使用它作为“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%
安东尼奥