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 command
padrão de sintaxe:
string1==string2 Specifies a true condition if the specified text strings match.
Nada sobre curingas. No entanto, você poderia fazer o melhorFINDSTR
comando:
FINDSTR
será 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)
FINDSTR
pode usar os seguintes metacaracteres que têm um significado especial como operador ou delimitador. FINDSTR
o 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