在批次檔中用通配符替換字串

在批次檔中用通配符替換字串

我有這個批次文件,我需要跳過某些行的「回顯」。我想跳過的行是:

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(真)如果在任何文件的任何行中均未找到匹配項(或根本未找到該文件)。
  • 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

相關內容