tralveller
Goto Top

Batch: Lange Variable mit Trennzeichen aufteilen und verarbeiten

Hallo zusammen,

ich stehe gerade etwas auf dem "Schlauch" und habe online keine Lösung gefunden.

Im Skript definiere ich eine Variable mit mehreren Werten, welche jeweils durch das Trennzeichen ";" voneinander getrennt sind:
SET CONFIGS=CONFIG_A_*_ZUSATZ;CONFIG_A;CONFIG_B_*_ZUSATZ_BLUB;CONFIG_B;CONFIG_C

Nun möchte ich die jede Config einzeln ausgeben und verarbeiten lassen:
Nun kommt Config CONFIG_A_*_ZUSATZ
Nun kommt Config CONFIG_A
Nun kommt Config CONFIG_B_*_ZUSATZ_BLUB
Nun kommt Config CONFIG_B
Nun kommt Config CONFIG_C

Mit meinen Ideen via FOR-Schleifen bin ich bisher nicht auf eine Lösung gekommen. face-plain

Hat jemand eine Idee? face-smile

Danke vielmals und Grüße
Tralveller

Content-ID: 665829

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

Ausgedruckt am: 22.11.2024 um 12:11 Uhr

GarfieldBonn
GarfieldBonn 18.04.2021 aktualisiert um 03:50:28 Uhr
Goto Top
Mit einem powershell_Skript etwa so:
$Env:CONFIGS="CONFIG_A_*_ZUSATZ;CONFIG_A;CONFIG_B_*_ZUSATZ_BLUB;CONFIG_B;CONFIG_C"  
$var = $Env:Configs.Split(";")  
for ($i=0; $i -lt $Var.count; $i++) {Write-Host $var[$i]}

in bat/cmd etwa so
set CONFIGS=CONFIG_A_*_ZUSATZ;CONFIG_A;CONFIG_B_*_ZUSATZ_BLUB;CONFIG_B;CONFIG_C

for /f "delims=; tokens=1,2,3,4,5*" %%i in ("%CONFIGS%") do (  
    echo erster  String %%i
    echo zweiter String %%j
    echo dritter String %%k
    echo vierter String %%l
    echo fünfter String %%m
)
tralveller
tralveller 18.04.2021 um 05:42:10 Uhr
Goto Top
Hallo zusammen,
@GarfieldBonn: vielen Dank für deine Rückmeldung face-smile

Nun, bei mir hat nun folgender Lösungsweg zum Ziel geführt:

Definieren der Variablen:
@ECHO OFF
REM Valid Configs with spaces as wildcard
SET CONFIGS="CONFIG_A_ _ZUSATZ" "CONFIG_A" "CONFIG_B_ _ZUSATZ_BLUB" "CONFIG_B" "CONFIG_C"  

Für eine bessere bzw. übersichtlichere Darstellung kann man auch stattdessen so die Variable definieren:
@ECHO OFF
REM Valid Configs with spaces as wildcard
SET CONFIGS="CONFIG_A_ _ZUSATZ"  
SET CONFIGS=%CONFIGS% "CONFIG_A"  
SET CONFIGS=%CONFIGS% "CONFIG_B_ _ZUSATZ_BLUB"  
SET CONFIGS=%CONFIGS% "CONFIG_B"  
SET CONFIGS=%CONFIGS% "CONFIG_C"  

Dann kann man die die Configs mit der aktuellen Config vergleichen face-smile:
@ECHO OFF
REM Current Config, which has to be find
SET CURRENT_CONFIG=CONFIG_B_
SET CURRENT_CONFIG_OPTION=_ZUSATZ_BLUB

REM At First Read Variable in and Split it into each separate Config separated via ""-signs..  
FOR %%A IN (%CONFIGS%) DO (
	ECHO Check String "%%A"  
	REM When Split each Config into First Part and into Second part, if available..
	FOR /F "TOKENS=1-2 DELIMS= " %%a IN (%%A) DO (  
		REM If Config has a Second part, it will check Second part of Config with current Config
		REM This will be done, cause else the check will find the Config in First part of Valid Config and Valid Config with Option Variable, too; cause check without first part will run after Check with second part, may the Config without Option will selected
		IF ".%CURRENT_CONFIG_OPTION%" NEQ "." (  
			ECHO Part 1 %%a Part 2 %%b
			IF "%%a %%b"=="%CURRENT_CONFIG% %CURRENT_CONFIG_OPTION%" SET CONFIG_VALID=%%a %%b  
			) ELSE (
		REM Else it will only compare First Part of Config
			ECHO Part 1 %%a
			IF "%%a"=="%CURRENT_CONFIG%" SET CONFIG_VALID=%%a  
			)
		ECHO\
		)
	)
IF DEFINED CONFIG_VALID (
	ECHO Config valid..
	ECHO Config is:
	ECHO %CONFIG_VALID%
	) ELSE (
	ECHO Config not valid..
	)

Dabei kann man sogar mit "Wildcards" arbeiten: in meinem Fall habe ich zuvor die aktuelle Config aufgesplittet in Config (1. Teil) und Config-Option (3. Teil). Der 2. Teil enthält eine Versionierung, welche damit für den Vergleich entfernt werden konnte.

Der Beitrag ist damit zu, ggfs. hilft jemand anderem das Beispiel zukünftig mal face-monkey face-smile

Besten Dank und Grüße
Tralveller