Ersetzen einer Zeichenfolge durch Platzhalter in einer Batchdatei

Ersetzen einer Zeichenfolge durch Platzhalter in einer Batchdatei

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 commandSyntaxmuster:

string1==string2  Specifies a true condition if the specified text strings match.

Nichts über Platzhalter. Sie können jedoch das Beste daraus machenFINDSTRBefehl:

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)

FINDSTRkönnen die folgenden Metazeichen verwenden, die entweder als Operator oder Trennzeichen eine besondere Bedeutung haben. FINDSTRDie 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

verwandte Informationen