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


0

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 comodín para atrapar 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

No tengo su solución, pero considere: find / i / v "A ;; TE; *" "filetwo" >> outtwo
TOOGAM

Respuestas:


1

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 hacer el mejor FINDSTRcomando :

FINDSTRestablecerá %ERRORLEVEL%lo siguiente:

  • 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 no se encuentra el archivo).
  • 2 Sintaxis incorrecta

Un interruptor no válido solo imprimirá un mensaje de error en la secuencia de error.

Expresiones regulares (búsqueda de patrones de texto)

FINDSTRpuede usar los siguientes metacaracteres que tienen un significado especial como operador o delimitador. FINDSTREl soporte para expresiones regulares es limitado 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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.