배치 파일에서 문자열을 와일드카드로 바꾸기

배치 파일에서 문자열을 와일드카드로 바꾸기

이 배치 파일이 있는데 일부 줄의 '에코'를 건너뛰어야 합니다. 건너뛰고 싶은 줄은 다음과 같습니다.

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

A;;TE;Tr100;줄을 잡고 표시를 건너뛰려면 와일드카드 만 사용하고 싶습니다 . 작동 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(True) 파일의 어느 라인에서도 일치하는 항목이 발견되지 않은 경우(또는 파일이 전혀 발견되지 않은 경우)
  • 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

관련 정보