Cara membaca string dari file teks dan menggunakan file batch Windows untuk mengekstrak substring
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
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
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