Ganti string dengan wildcard dalam file batch

0

Saya memiliki file batch ini dan saya perlu melewati 'gema' dari beberapa baris. Baris yang ingin saya lewati adalah:

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

Saya hanya ingin menggunakan A;;TE;Tr100;dan kemudian wildcard untuk menangkap garis dan melewatkan menampilkannya. Ini bekerja untuk W;;tetapi tidak bekerja untuk A;;TE; Bagaimana saya bisa melakukannya?

@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
susik
sumber
Saya tidak punya solusi, tetapi pertimbangkan: find / i / v "A ;; TE; *" "filetwo" >> outtwo
TOOGAM

Jawaban:

1

Baca if /?; Anda menggunakan IF [NOT] string1==string2 commandpola sintaks:

string1==string2  Specifies a true condition if the specified text strings match.

Tidak ada tentang wildcard . Namun, Anda dapat melakukan yang terbaik dari FINDSTRperintah :

FINDSTRakan ditetapkan %ERRORLEVEL%sebagai berikut:

  • 0 (Salah) kecocokan ditemukan di setidaknya satu baris setidaknya satu file.
  • 1 (Benar) jika kecocokan tidak ditemukan pada baris apa pun dari file apa pun, (atau jika file tidak ditemukan sama sekali).
  • 2 Sintaks yang salah

Switch yang tidak valid hanya akan mencetak pesan kesalahan dalam aliran kesalahan.

Ekspresi Reguler (Cari pola teks)

FINDSTRdapat menggunakan karakter metach berikut yang memiliki arti khusus baik sebagai operator atau pembatas. FINDSTRdukungan untuk ekspresi reguler terbatas dan tidak standar , hanya karakter metak berikut yang didukung:

 .         Wildcard: any character
 *         Repeat: zero or more occurances of previous character or class
 ^         Line position: beginning of line
 $         Line position: end of line
           … etc.

Cuplikan kode berikut dapat membantu:

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
JosefZ
sumber