Cara membaca string dari file teks dan menggunakan file batch Windows untuk mengekstrak substring

Aug 20 2020

Kami memiliki file teks yang kami butuhkan yang berisi contoh berikut. Satu string konstan "D80" diikuti dengan string lain:

D80KAAAAAA
D80KBBBBBB
D80KCCCCCC

Kami ingin mengekstraknya menggunakan file skrip batch Windows (bukan PowerShell) dan FOR loop untuk mendapatkan output ini:

AAAAAA
BBBBBB
CCCCCC

Sejauh ini kita sudah sampai pada titik ini. Sebagai ilustrasi, saya telah menunjukkan berbagai upaya mengekstrak substring:

setlocal EnableDelayedExpansion

for /F "tokens=1 delims="    %%a   in (TPLIST.txt) do (
    echo %%a
    echo %%(a:~4,6)
    set substr1=%%(a:~4,6)%
    set substr2=%(a:~4,6)%
    set substr3=!(a:~4,6)!
    set substr4=%!(a:~4,6)!%
    echo %substr1%
    echo %substr2%
    echo %substr3%
    echo %substr4%
)

Namun, ekstrak substring gagal:

C:\User>setlocal EnableDelayedExpansion
C:\User>for /F "tokens=1 delims=" %a in (TPLIST.txt) do (
echo %a
 echo %(a:~4,6
)
C:\User>(
echo D80KAAAAAA
 echo %(a:~4,6
)
D80KAAAAAA
%(a:~4,6
C:\User>(
echo D80KBBBBBB
 echo %(a:~4,6
)
D80KBBBBBB
%(a:~4,6
C:\User>(
echo D80KCCCCCC
 echo %(a:~4,6
)
D80KCCCCCC
%(a:~4,6
C:\User>set substr1=%(a:~4,6)
C:\User>set substr2=~4,6)
C:\User>set substr3=!(a:~4,6)!
C:\User>set substr4=~4,6)!
C:\User>echo %(a:~4,6)
%(a:~4,6)
C:\User>echo ~4,6)
~4,6)
C:\User>echo ~4,6)
~4,6)
C:\User>echo ~4,6)
~4,6)

Bantuan apa pun akan sangat dihargai.

Jawaban

1 DavidPostill Aug 20 2020 at 04:36

Bagaimana cara mengekstrak substring?

Skrip Anda rusak parah jadi saya menulis ulang:

@echo off
setlocal enabledelayedexpansion
for /f "tokens=1,2,3" %%a in (test.txt) do (
  set _s1=%%a
  set _s2=%%b
  set _s3=%%c
  echo !_s1:~4!
  echo !_s2:~4!
  echo !_s3:~4!
  )
endlocal

Contoh penggunaan:

F:\test>type test.txt
D80KAAAAAA D80KBBBBBB D80KCCCCCC

F:\test>test
AAAAAA
BBBBBB
CCCCCC
F:\test>

Bacaan lebih lanjut

  • Indeks AZ dari baris perintah Windows CMD | SS64.com
  • Perintah CMD Windows (dikategorikan) - Windows CMD - SS64.com
  • Untuk / f - Loop melalui teks - Windows CMD - SS64.com
  • substring variabel - Windows CMD - SS64.com
1 Hackoo Aug 26 2020 at 05:44

Dalam file batch murni Anda dapat melakukan sesuatu seperti itu:

@echo off
Set "InputFile=TPLIST.txt"
Set "OutPutFile=%~dp0Out-Extract.txt"

setlocal enabledelayedexpansion
> "%OutPutFile%" (
    @for /f "delims=" %%a in ('Type "%InputFile%"') do (
    set "_MyString=%%a"
    echo !_MyString:~4!
    )
)
endlocal
If Exist "%OutPutFile%" Start "" "%OutPutFile%"

Di Powershell jika anggota lain ingin menguji menggunakan RegEx:

cls
$MyString = @' D80KAAAAAA D80KBBBBBB D80KCCCCCC D80KDDDDDD D80KEEEEEE D80KFFFFFF D80KXXXXXX D80KYYYYYY D80KZZZZZZ '@ -split [System.Environment]::NewLine $pattern = '(?![D80K]).+'
$MyString | %{ [regex]::matches($_,$pattern) } | %{ $_.Groups[0].Value }

Anda akan mendapatkan output untuk kedua solusi batch atau PowerShell seperti itu:

AAAAAA
BBBBBB
CCCCCC
DDDDDD
EEEEEE
FFFFFF
XXXXXX
YYYYYY
ZZZZZZ