Come leggere una stringa da un file di testo e utilizzarla in un file batch di Windows per estrarre una sottostringa

Aug 20 2020

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

1 DavidPostill Aug 20 2020 at 04:36

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
1 Hackoo Aug 26 2020 at 05:44

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