Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 获取显示在匹配行之前的行_Batch File_Cmd - Fatal编程技术网

Batch file 获取显示在匹配行之前的行

Batch file 获取显示在匹配行之前的行,batch-file,cmd,Batch File,Cmd,我正在尝试使用进行循环findstr结果。我想让var6成为字符串Class=”上方的整行代码!var4。我把skip=-1放进去,但这不起作用(向后看一行) 所以如果它看起来像这样: Name=Bismark #14 Class=var4 我想要瓦尔6=Name=Bismarck#14 我很接近,但我不知道如何告诉for循环在找到的findstr字符串上方查找一行 解决方案: @echo off set var4=BBBismarck for /f "delims=" %%L in (P

我正在尝试使用
进行
循环
findstr
结果。我想让var6成为字符串
Class=”上方的整行代码!var4。我把
skip=-1
放进去,但这不起作用(向后看一行)

所以如果它看起来像这样:

Name=Bismark #14
Class=var4
我想要瓦尔6=Name=Bismarck#14

我很接近,但我不知道如何告诉
for
循环在找到的
findstr
字符串上方查找一行

解决方案:

@echo off

set var4=BBBismarck

for /f "delims=" %%L in (PosTime_Campaign_SCR.mis) do (
if /i "%%L" equ "Class=%var4%" (
    goto endloop
)
set "var6=%%L"
)
    :endloop

echo %var6%
pause

使用
findstr
来完成这项工作是很困难的

我可以看到一种方法:使用
/N
选项,以便
findstr
写出行号,然后在另一个循环中使用该行号,在该循环中,您一次处理文件的一行,并将
var6
设置为前一行

(set var6=)
for /f "delims=" %%L in (PosTime_Campaign_SCR.mis) do IF NOT DEFINED var6 (
echo %%L | findstr "Class=!var4!" >nul
if not errorlevel 1 (set var6=!lastline!)
set lastline=%%L
)
但是,如果仍然要循环文件中的每一行,那么最好完全跳过
findstr
,只做自己的比较。或者在每行上使用
findstr

下面是一些完全未经测试的代码来描述我的想象:

for /f %%L in (PosTime_Campaign_SCR.mis) do (
    if /i "%%L" equ "Class=%var4%" (
        goto endloop
    )
    set "var6=%%L"
)
:endloop

echo %var6%
我们在这里做的是为每一行设置
var6
,但是当我们到达我们想要的行时,我们跳过循环。因此,
var6
最终被设置为前一行的值

(set var6=)
for /f "delims=" %%L in (PosTime_Campaign_SCR.mis) do IF NOT DEFINED var6 (
echo %%L | findstr "Class=!var4!" >nul
if not errorlevel 1 (set var6=!lastline!)
set lastline=%%L
)
…假设Class=var4永远不会出现在文件的第一行上

lastline
保存读取的最后一行的内容。当FINDSTR检测到匹配行时,var6被设置为前一行读取的内容,并且由于var6现在在环境中被设置,检查不会重复,因此它将var6设置为第一个匹配行之前的行的内容

如果删除
如果未定义var6
,则var6将设置为最后一个匹配行之前的行内容


如果var6在执行后未定义,则没有匹配行。

Hi。差不多了。它返回上面行的一部分,但不返回整行。这些行中可能有空格。因此,使用您提供的代码和我的示例,它将只返回
Name=Bismark
,而不是
Name=Bismark#14
非常智能和简单的代码。它也很快。但是如何在行中包含空格和特殊字符,如#?