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 command
patró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áximoFINDSTR
dominio:
FINDSTR
se 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)
FINDSTR
Puede utilizar los siguientes metacaracteres que tienen un significado especial ya sea como operador o delimitador. FINDSTR
el 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