Substitua uma string por curinga em um arquivo em lote

Substitua uma string por curinga em um arquivo em lote

Eu tenho esse arquivo em lote e preciso pular o 'eco' de algumas linhas. As linhas que quero pular são:

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

Quero usar apenas A;;TE;Tr100;e depois o curinga para capturar a linha e pular a exibição dela. Funciona W;;, mas não funciona. A;;TE; Como eu poderia fazer isso?

@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

Responder1

Ler if /?; você está usando o IF [NOT] string1==string2 commandpadrão de sintaxe:

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

Nada sobre curingas. No entanto, você poderia fazer o melhorFINDSTRcomando:

FINDSTRserá definido %ERRORLEVEL%da seguinte forma:

  • 0 (Falso) uma correspondência é encontrada em pelo menos uma linha de pelo menos um arquivo.
  • 1 (Verdadeiro) se uma correspondência não for encontrada em nenhuma linha de nenhum arquivo (ou se o arquivo não for encontrado).
  • 2 Sintaxe errada

Uma opção inválida imprimirá apenas uma mensagem de erro no fluxo de erros.

Expressões regulares(Pesquise padrões de texto)

FINDSTRpode usar os seguintes metacaracteres que têm um significado especial como operador ou delimitador. FINDSTRo suporte para expressões regulares élimitado e fora do padrão, apenas os seguintes metacaracteres são suportados:

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

O seguinte trecho de código pode ajudar:

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

informação relacionada