Toplu iş dosyasındaki bir dizgiyi joker karakterle değiştirme


0

Bu toplu iş dosyasına sahibim ve bazı satırların 'echo'larını atlamam gerekiyor. Atlamak istediğim satırlar:

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

Sadece A;;TE;Tr100;çizgiyi yakalamak ve görüntülemeyi atlamak için joker karakter kullanmak istiyorum . İşe yarıyor W;;ama işe yaramıyor A;;TE; Nasıl yapabilirim?

@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

Çözümünüz yok ama düşünün: / i / v'yi bulun "A ;; TE; *" "filetwo" >> outtwo
TOOGAM

Yanıtlar:


1

Oku if /?; IF [NOT] string1==string2 commandsözdizimi desenini kullanıyorsunuz :

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

Joker karakterler hakkında bir şey yok . Bununla birlikte, aşağıdaki FINDSTRkomutlardan en iyisini yapabilirsiniz :

FINDSTR%ERRORLEVEL%aşağıdaki gibi ayarlanacaktır :

  • 0 (Yanlış) bir eşleşme, en az bir dosyanın en az bir satırında bulunur.
  • 1 (True) herhangi bir dosyanın herhangi bir satırında bir eşleşme bulunamazsa (veya dosya hiç bulunmazsa).
  • 2 Yanlış sözdizimi

Geçersiz bir anahtar yalnızca hata akışında bir hata mesajı yazdırır.

Normal İfadeler (Metin kalıplarını arayın)

FINDSTROperatör veya sınırlayıcı olarak özel anlamı olan aşağıdaki meta karakterleri kullanabilir. FINDSTRDüzenli ifadeler için destek sınırlıdır ve standart değildir , yalnızca aşağıdaki meta karakterler desteklenir:

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

Aşağıdaki kod pasajı yardımcı olabilir:

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.