Batch file 如何将文本与命令字进行比较
我使用这个批处理文件的总体目标是运行一个.txt文件,并获取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
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
用于比较文件,我正在将这些值写入一个空白文本文档是的,好的,对不起,我误解了你的问题。