У меня есть этот пакетный файл и мне нужно пропустить '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