Batch file 如何将文本与命令字进行比较

Batch file 如何将文本与命令字进行比较,batch-file,text,Batch File,Text,我使用这个批处理文件的总体目标是运行一个.txt文件,并获取Th-:-2.000000th+:-0.160000-In Limits(这是测试的限制,始终相同的数据直接出现在后面)之后的所有行,并在测试结束时停止“通过”或“失败”。到目前为止,我有以下代码: @echo off setlocal EnableDelayedExpansion set flag = N for /f "tokens=*" %%a in (input.txt) do ( set temp=%%a e

我使用这个批处理文件的总体目标是运行一个.txt文件,并获取
Th-:-2.000000th+:-0.160000-In Limits
(这是测试的限制,始终相同的数据直接出现在后面)之后的所有行,并在测试结束时停止“通过”或“失败”。到目前为止,我有以下代码:

@echo off
setlocal EnableDelayedExpansion
set flag = N
for /f "tokens=*" %%a in (input.txt) do 
(
    set temp=%%a
    echo !flag!
    if "%%a" == "Pass\par" set flag=N
    if !flag! == Y  echo. %%a >> output.txt
    if "%%a" == "Th-:  -2.000000   Th+:  -0.160000   - In Limits\par" set flag=Y
)
pause
这将设置一个标志=N,除非标志=Y,否则不会写入一行。该标志在给定行之后变高。我的问题是,在“”中有一个“+”和“In”,它们是成批的关键字,我如何将它们注释出来,以将它们包含在文本中

非常感谢对我的代码的任何其他建议

编辑--文本文件显示如下:

Th-:  -2.000000   Th+:  -0.160000   - In Limits

Die 1  :  -0.205359   Pass 

Die 2  :  -0.210690   Pass 

Die 3  :  -0.215712   Pass 

Die 4  :  -3.458495   Fail 

Die 5  :  -0.210452   Pass 

FAIL

我正在尝试将中间的行移到另一个文本文件中,我不知道这是否是您想要的,但我将提供一个脚本,可以帮助您,它创建了3个​​变量包含文件的内容,1个变量包含文件的全部内容。另一个变量包含指定文本之前的所有内容,另一个变量包含指定文本之后的所有内容

@echo off
@break off
@title How to compare text with a command word - D3F4ULT
@color 0a
@cls

setlocal EnableDelayedExpansion

REM CRLF = Breakline Trick in Batch | P.S: Is need two breaklines between caret char and next command, don't remove the two breaklines

set CRLF=^


REM Start of Script
set "InputContentsAll="
set "InputContentsBefore="
set "InputContentsAfter="

set "FLAG=N"

for /F "usebackq tokens=*" %%a in ( "input.txt" ) do (
  set "InputContentsAll=!InputContentsAll!!CRLF!%%~a"
  if "%%~a" EQU "Th-: -2.000000 Th+: -0.160000 - In Limits" (
    set "FLAG=Y"
  ) else (
    if /I "!FLAG!" EQU "N" (
      if not defined InputContentsBefore (
        set "InputContentsBefore=%%~a"
      ) else (
        set "InputContentsBefore=!InputContentsBefore!!CRLF!%%~a"
      )
    ) else if /I "!FLAG!" EQU "Y" (
      if not defined InputContentsAfter (
        set "InputContentsAfter=%%~a"
      ) else (
        set "InputContentsAfter=!InputContentsAfter!!CRLF!%%~a"
      )
    )
  )
)

:: Variable InputContentsBefore = Before of "Th-: -2.000000 Th+: -0.160000 - In Limits"
:: Variable InputContentsAfter  = After  of "Th-: -2.000000 Th+: -0.160000 - In Limits"
:: Variable InputContentsAll    = All Contents of file input.txt

:: echo !InputContentsBefore!
:: echo !InputContentsAfter!
:: echo !InputContentsAfter!

pause
exit
@ECHO关闭
SETLOCAL
设置标志=N
对于/f“delims=”%(q20686770.txt)中的%%a,请执行以下操作(
如果未定义标志ECHO%%a>>output.txt
如果“%%a”==“通过”设置标志=N
如果“%%a”==“失败”设置标志=N
如果“%%a”==”Th-:-2.000000 Th+:-0.160000-限制中的“设置”标志=”
)
后藤:EOF
这应该对你有用

注意:为了进行测试,我将输入文件名更改为
q20686770.txt
,您需要将其更改回原来的文件名

批处理对
SET
语句中的空格敏感
SET FLAG=N
将名为“FLAGSpace”的变量的值设置为“SpaceN”

TEMP
TMP
是指定临时文件目录位置的特殊变量名称。最好不要改变它们,因为意外的结果可能接踵而至

“\par”是一个文本字符串,
\
很少在批处理中用作正则表达式转义字符,当然不在
if
语句中

不幸的是,告诉我们你的代码是如何工作的,在交流它应该做什么时,这并不是很有用。没有迹象表明您打算输出什么。对于距离,您没有说明是否要输出最终的“通过/失败”行,或者是否需要间距

要想
NOT
输出最终的“通过/失败”,只需将
如果未定义
行移动到
if..FAIL..
行之后

输出将被添加到任何现有的
output.txt
。如果要创建新的
output.txt
,则需要在批处理开始时将其删除。为此,只需插入新行即可

del output.txt 2>nul

在…行的
前面的某个地方。还有其他方法可以做到这一点,但这种方法所做的更改最少(因此更容易解释)。行显然会删除文件,但如果文件不存在,也会抑制任何错误消息。

为什么不使用unix命令
diff
?我认为
diff
用于比较文件,我正在将这些值写入一个空白文本文档是的,好的,对不起,我误解了你的问题。