バッチファイルで文字列をワイルドカードで置き換える

バッチファイルで文字列をワイルドカードで置き換える

このバッチ ファイルがあり、いくつかの行の「エコー」をスキップする必要があります。スキップしたい行は次のとおりです。

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 (False) 少なくとも 1 つのファイルの少なくとも 1 行に一致が見つかります。
  • どのファイルのどの行にも一致するものが見つからない場合(またはファイルがまったく見つからない場合)は 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

関連情報