我对这个批处理文件的总体目标是运行一个.txt文件并在Th-: -2.000000 Th+: -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
我试图将中间线移动到另一个文本文件
答案 0 :(得分:0)
我不知道这是不是你想要的,但我会提供一个可以帮助你的脚本,它会创建3个带有文件内容的变量,1个变量包含文件的全部内容。 Txt,其他变量包含指定文本之前的所有内容,另一个变量包含指定文本之后的所有内容。
@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
答案 1 :(得分:0)
@ECHO OFF
SETLOCAL
set flag=N
for /f "delims=" %%a in (q20686770.txt) do (
IF NOT DEFINED flag ECHO %%a >>output.txt
IF "%%a"=="PASS" SET flag=N
IF "%%a"=="FAIL" SET flag=N
if "%%a"=="Th-: -2.000000 Th+: -0.160000 - In Limits" set "flag="
)
GOTO :EOF
这应该适合你。
注意:我将输入文件名更改为q20686770.txt
以进行测试 - 您需要将其更改回来。
批处理对SET
语句中的空格敏感。 SET FLAG = N
将名为“FLAG Space ”的变量设置为值“ Space N”
TEMP
和TMP
是特殊的变量名,用于指定临时文件目录的位置。最好不要改变它们,因为可能会出现意想不到的结果。
“\ par”是一个文字文本字符串 - \
很少用作批处理中的正则表达式转义字符 - 当然不在if
语句中。
不幸的是,告诉我们how
您的代码不起作用对于传播它应该做的what
并不是很有用。没有迹象表明您打算输出什么。对于istance,您没有说明是否要输出最终的“PASS / FAIL”行,或者是否需要间距。
要NOT
输出最终的“PASS / FAIL”,只需移动if not defined
行之后的if..fail..
行。
任何现有APPENDED
的输出均为output.txt
。如果要创建新的output.txt
,则需要在批处理开始时将其删除。为此,只需插入一个新行
del output.txt 2>nul
FOR...
行之前的某个地方。有 ARE 这样做的其他方法,但这种方式做出的改动最少(因此更容易解释。)显然,该行删除了文件,但如果文件没有,也会删除任何错误消息存在。