Заменить строку на подстановочный знак в пакетном файле

Заменить строку на подстановочный знак в пакетном файле

У меня есть этот пакетный файл и мне нужно пропустить 'echo' некоторых строк. Строки, которые я хочу пропустить:

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

Я хочу использовать только A;;TE;Tr100;и затем wildcard, чтобы поймать строку и пропустить ее отображение. Это работает для , W;;но не работает для A;;TE; Как я могу это сделать?

@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

решение1

Прочитайте if /?; вы используете IF [NOT] string1==string2 commandсинтаксический шаблон:

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

Ничего о подстановочных знаках. Однако вы могли бы извлечь максимум пользы изFINDSTRкоманда:

FINDSTRустановит %ERRORLEVEL%следующим образом:

  • 0 (Ложь) совпадение найдено хотя бы в одной строке хотя бы одного файла.
  • 1 (Истина), если совпадение не найдено ни в одной строке ни одного файла (или если файл вообще не найден).
  • 2 Неправильный синтаксис

Недопустимый переключатель выведет только сообщение об ошибке в потоке ошибок.

Обычные выражения(Поиск шаблонов текста)

FINDSTRможно использовать следующие метасимволы, которые имеют особое значение как оператор или разделитель. FINDSTRподдержка регулярных выраженийограниченный и нестандартныйподдерживаются только следующие метасимволы:

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

Следующий фрагмент кода может помочь:

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

Связанный контент