Come leggere una stringa da un file di testo e utilizzarla in un file batch di Windows per estrarre una sottostringa
Abbiamo un file di testo di cui abbiamo bisogno contenente il seguente esempio. Una stringa costante "D80" seguita da un'altra stringa:
D80KAAAAAA
D80KBBBBBB
D80KCCCCCC
Vogliamo estrarlo utilizzando un file script batch di Windows (non powershell) e un ciclo FOR per ottenere questo output:
AAAAAA
BBBBBB
CCCCCC
Finora siamo arrivati a questo punto. A titolo illustrativo, ho mostrato i diversi tentativi di estrazione della sottostringa:
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%
)
Tuttavia, l'estrazione della sottostringa non riesce:
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)
Qualsiasi aiuto sarebbe molto apprezzato.
Risposte
Come estraggo una sottostringa?
La tua sceneggiatura è orribilmente rotta, quindi l'ho riscritta:
@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
Utilizzo di esempio:
F:\test>type test.txt
D80KAAAAAA D80KBBBBBB D80KCCCCCC
F:\test>test
AAAAAA
BBBBBB
CCCCCC
F:\test>
Ulteriori letture
- Un indice AZ della riga di comando di Windows CMD | SS64.com
- Comandi CMD di Windows (classificati) - CMD di Windows - SS64.com
- For / f: scorre il testo - Windows CMD - SS64.com
- sottostringa variabile - Windows CMD - SS64.com
Nel file batch Pure puoi fare qualcosa del genere:
@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%"
In Powershell se un altro membro desidera testare utilizzando 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 }
Otterrai come output per entrambe le soluzioni batch o powershell in questo modo:
AAAAAA BBBBBB CCCCCC DDDDDD EEEEEE FFFFFF XXXXXX YYYYYY ZZZZZZ