tottipdm
Goto Top

Verwendung von Teilstrings in mit findstr ausgelesenen Zeilen

Hallo zusammen,

ich habe ein Textdatei, welche in den Zeilen alphanumerische Zeichenketten hat, z.B. AB000012.
Für mich wichtig sind die letzten beiden Zeichen. Diese sollen mit Bedingungen abgeglichen werden
um dann anschließend einen call-Befehl für ein externes Programm abzusetzen.
Das externe Programm erwartet einen Parameter, z.B. /PARAMETER=GRUPPE1

der Paramter sollte folgende Ausprägungen in Bezug auf die letzten beiden Zeichen jeder Zeile der Textdatei haben:
von 01 bis 15 ==> /PARAMETER=GRUPPE1
von 16 bis 35 ==> /PARAMETER=GRUPPE2
von 35 bis 85 ==> /PARAMETER=GRUPPE3
von 86 bis 99 ==> /PARAMETER=GRUPPE4

Ich habe nun schon folgendes versucht, bekomme aber nicht das gewünschte Ergebnis (erstmal ob die Variablen richtig befüllt werden):

SETLOCAL EnableDelayedExpansion
@FOR /f "delims=: tokens=1,*" %%i in ('findstr /n $ "%~1"') do (  
set x=%%j
set y=%x:~-2% 
echo %y% >> c:\test.txt )

Meine Test-Textdatei hat folgenden inhalt:
AB000012
AB000025
AB000036
AB000086

was mir jedoch angezeigt wird in der Eingabeaufforderung ist folgendes:
C:\>(
set x=AB000012
 set y=~-2
 echo    1>>c:\test.txt
)

C:\>(
set x=AB000025
 set y=~-2
 echo    1>>c:\test.txt
)

C:\>(
set x=AB000036
 set y=~-2
 echo    1>>c:\test.txt
)

C:\>(
set x=AB000086
 set y=~-2
 echo    1>>c:\test.txt
)

was mache ich falsch?

Vielen Dank
Torsten

Content-Key: 79424

Url: https://administrator.de/contentid/79424

Printed on: April 24, 2024 at 06:04 o'clock

Member: Biber
Biber Jan 29, 2008 at 12:25:07 (UTC)
Goto Top
Moin TottiPDm,

willkommen im Forum.

Wenn du mit verzögerter Variablenauflösung arbeitest (DelayedExpansion), musst Du auch diejenigen Variablen, die tatsächlich "verzögert" aufgelöst werden sollen, so einschließen: !var! statt so %var%.
Das "Enablen" ist ja nur das grundssätzliche Ermöglichen diesen Features, nicht die konkrete oder gar auf alle Variablen bezogene Anweisung.
@echo off & SETLOCAL EnableDelayedExpansion
Set out=con:
REM [Bei Bedarf wieder aktiveren] Set Out=c:\test.txt
FOR /f "delims=: tokens=1,*" %%i in ('findstr /n $ "%~1"') do (  
set x=%%j
set y=!x:~-2! 
echo !y! >> %out% )

Grüße
Biber
Member: TottiPdm
TottiPdm Jan 29, 2008 at 13:55:25 (UTC)
Goto Top
Hallo Biber,

super. vielen Dank für den Hinweis mit den Varibalen.

Jetzt habe ich mein Batch zum laufen bekommen.

Hier mla die Lösung für alle anderen:

@ECHO OFF & SETLOCAL EnableDelayedExpansion
@DEL test.txt
@FOR /f "delims=: tokens=1,*" %%i in ('findstr /n $ "%~1"') do (  
	set x=%%j
	set y=!x:~-2!
	If !y! GTR 90 (
		echo Bei !y! erfolgt kein Aufruf  >> c:\test.txt 
		) else (		
			If !y! LSS 15 (
				set param=GROUP1
				echo !y!, !param! >> c:\test.txt 
				) else (
					If !y! LSS 35 (
						set param=GROUP2
						echo !y!, !param! >> c:\test.txt 
						) else (
							If !y! LSS 85 (
								set param=GROUP3
								echo !y!, !param! >> c:\test.txt 
							) else (
								set param=GROUP4
								echo !y!, !param! >> c:\test.txt 
							) 
						)
				)
			echo Der Aufruf waere: call datei.exe  !param! >> c:\test.txt
			)
	)	
SETLOCAL DisableDelayedExpansion

Jetzt muss ich nur noch die Test-echos entfernen und den letzten echo-Befehl durch den call ersetzen und dann läufts.

Danke

Lieben Gruß

Torsten