Reemplazar una cadena con comodín en un archivo por lotes

Reemplazar una cadena con comodín en un archivo por lotes

Tengo este archivo por lotes y necesito omitir el "eco" de algunas líneas. Las líneas que quiero omitir son:

W;;
A;;TE;Tr100;8;;31.79;SHIP-TE50;;
A;;TE;Tr100;8;;33.08;SHIP-TE50;;
and so on .

Quiero usar solo A;;TE;Tr100;y luego un comodín para capturar la línea y omitir mostrarla. Funciona para W;;pero no funciona para A;;TE; ¿Cómo podría hacerlo?

@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

Respuesta1

Leer if /?; estás usando el IF [NOT] string1==string2 commandpatrón de sintaxis:

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

Nada sobre comodines. Sin embargo, podrías aprovechar al máximoFINDSTRdominio:

FINDSTRse establecerá %ERRORLEVEL%de la siguiente manera:

  • 0 (Falso) se encuentra una coincidencia en al menos una línea de al menos un archivo.
  • 1 (Verdadero) si no se encuentra una coincidencia en ninguna línea de ningún archivo (o si el archivo no se encuentra en absoluto).
  • 2 Sintaxis incorrecta

Un cambio no válido solo imprimirá un mensaje de error en el flujo de errores.

Expresiones regulares(Busca patrones de texto)

FINDSTRPuede utilizar los siguientes metacaracteres que tienen un significado especial ya sea como operador o delimitador. FINDSTRel soporte para expresiones regulares eslimitado y no estándar, solo se admiten los siguientes metacaracteres:

 .         Wildcard: any character
 *         Repeat: zero or more occurances of previous character or class
 ^         Line position: beginning of line
 $         Line position: end of line
           … etc.

El siguiente fragmento de código podría ayudar:

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

información relacionada