Ich habe diese Batchdatei und muss das „Echo“ einiger Zeilen überspringen. Die Zeilen, die ich überspringen möchte, sind:
W;;
A;;TE;Tr100;8;;31.79;SHIP-TE50;;
A;;TE;Tr100;8;;33.08;SHIP-TE50;;
and so on .
A;;TE;Tr100;
Ich möchte nur und dann Platzhalter verwenden, um die Zeile abzufangen und ihre Anzeige zu überspringen. Das funktioniert für W;;
, aber nicht für. A;;TE;
Wie kann ich das machen?
@ECHO OFF
cls
SETLOCAL ENABLEDELAYEDEXPANSION
SET /a number=%1-1
SET "sourcedir=z:\abc\def\ghi"
SET "filename1=%sourcedir%\jklm%number%.gwl"
SET "last="
FOR /f "delims=" %%a IN ('sort "%filename1%"') DO (
IF "%%a"=="W;;" goto :break
IF "%%a"=="A;;TE;*" goto :break
IF "%%a"=="!last!" ECHO %%a
SET "last=%%a"
)
:break
GOTO :EOF
Antwort1
Lesen Sie if /?
; Sie verwenden das IF [NOT] string1==string2 command
Syntaxmuster:
string1==string2 Specifies a true condition if the specified text strings match.
Nichts über Platzhalter. Sie können jedoch das Beste daraus machenFINDSTR
Befehl:
FINDSTR
%ERRORLEVEL%
wird wie folgt eingestellt :
- 0 (Falsch) In mindestens einer Zeile von mindestens einer Datei wurde eine Übereinstimmung gefunden.
- 1 (Wahr), wenn in keiner Zeile einer Datei eine Übereinstimmung gefunden wird (oder wenn die Datei überhaupt nicht gefunden wird).
- 2 Falsche Syntax
Ein ungültiger Schalter druckt nur eine Fehlermeldung im Fehlerstream.
Reguläre Ausdrücke(Suche nach Textmustern)
FINDSTR
können die folgenden Metazeichen verwenden, die entweder als Operator oder Trennzeichen eine besondere Bedeutung haben. FINDSTR
Die Unterstützung für reguläre Ausdrücke istbegrenzt und nicht standardisiertwerden nur die folgenden Metazeichen unterstützt:
. Wildcard: any character
* Repeat: zero or more occurances of previous character or class
^ Line position: beginning of line
$ Line position: end of line
… etc.
Folgendes Code-Snippet könnte helfen:
SET "last="
FOR /f "delims=" %%a IN ('sort "%filename1%"') DO (
echo("%%a"|>NUL findstr "^\"A;;TE;.* ^\"W;;\"$"
IF !errorlevel! EQU 0 (
rem match:
rem either lines starting with A;;TE;
rem or lines equal to W;;
rem goto :break
) else (
IF "%%a"=="!last!" ECHO %%a
SET "last=%%a"
)
)
:break