2016-08-06 13 views
1

Wie extrahiere ich alles zwischen inkno und dem Leerzeichen ie12345678 im Beispiel-Batch unten und gebe es in eine inkno-Variable ein?Substring-Hilfe in der Batch-Datei

@echo off 
Set mystring=test incno12345678 wo5555 locFred Street 
Echo "my string=%mystring%" 
Echo incno 
Echo wo  
Echo loc 

Die incno 8 bis 11 Zeichen lang sein können, aber zwischen incno und einem Raum in der Zeichenfolge

ich jetzt mit habe Probleme Zuweisen der %% d Variable in die mystring Variable jetzt immer es ist in einer for-Schleife. Kann mir jemand dabei helfen? Siehe unten.

@echo off 
SETLOCAL enableDelayedExpansion 
color 0B 
For /d %%d in ("C:\Users\%Username%\LocalData\*") do (
Echo "Folder = %%d" 
Set mystring=%%d 
echo "MyString = %mystring%" 
pause 
REM delete until (including) "incno": 
set mystring=%mystring:*incno=% 
echo %mystring% 
REM delete starting with (including) " ": 
set mystring=%mystring: =&rem % 
echo "Incident Number = %mystring%" 
pause 
) 

Antwort

2
set "mystring=test incno12345678 wo5555 locFred Street" 
for /f %%V in ("%mystring:* incno=%") do set "incno=%%V" 

verzögerte Erweiterung kann verwendet werden, wenn es eine Chance gibt, dass mystring Gift Zeichen enthalten könnte und Zitate:

setlocal enableDelayedExpansion 
set mystring=test incno12345678 wo5555 loc"4th & Main" 
for /f %%V in ("!mystring:* incno=!") do set "incno=%%V" 

Wenn der resultierende Wert ! enthalten könnte (in diesem Fall kein Problem), dann verzögerte Erweiterung m

setlocal disableDelayedExpansion 
set mystring=test varABC!XYZ "&)^|<>" 
setlocal enableDelayedExpansion 
for /f %%V in ("!mystring:* var=!") do (
    endlocal 
    set "var=%%V" 
) 
4

Sie können es in zwei Schritten mit Teilzeichenfolge Ersatz tun:

Set mystring=test incno12345678 wo5555 locFred Street 
echo %mystring% 
REM delete until (including) "incno": 
set mystring=%mystring:*incno=% 
echo %mystring% 
REM delete starting with (including) " ": 
set mystring=%mystring: =&rem % 
echo %mystring% 
+0

Wie funktioniert 'set mystring =% mystring: = & rem% 'arbeiten? Ich kann das nirgendwo dokumentiert finden? Was macht das '& rem'? – DavidPostill

+0

@DavidPostill - Machen Sie den Ersatz auf Papier und Sie werden sehen. Es fügt einfach einen verketteten REM-Befehl ein, so dass der Rest der Zeichenfolge ignoriert wird. – dbenham

+0

@dbenham Ah, natürlich. Ein weiterer hinterhältiger Trick :) – DavidPostill