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