prittstift69
Goto Top

Batch - unterschiedliche Variablen-Kombinationen in xxx.cvs definieren

Es wäre schön wenn mir jemand bei folgendem Problem helfen könnte:

Aktuell wird eine bestimmtes Tool (Catia) über folgenden Batch-File gestartet:

start_CATIAV5.bat

set CATVERS=B14_DMU
set BIT=32
set WIN=intel_a
set PROJECT=CATSettings_xxx_R14Sp4_32
set ENV=CATIA.V5R14

set CATInstallPath=N:\CAD\CATIA_V5\%CATVERS%\%WIN%
set DIRENV=N:\CAD\Start_CATIAV5\CATEnv_%BIT%

REM =====================================================================
REM Start CATIAV5
REM =====================================================================

start %CATInstallPath%\code\bin\CATSTART.exe -run "CNEXT.exe" -env %ENV% -direnv "%DIRENV%" -object empty

:exit

Um komfortabel unterschiedliche Konfigurationen starten zu können habe ich nun eine Konfigurationen.csv angelegt

Konfigurationen.csv

POS,OS Win,CATIAV5 Release,Catia Sp,Catia Hot Fix,%CATVERS%,%BIT%,%WIN%,%PROJECT%,%ENV%,%CATInstallPath%
KONF_01,32 bit,R14,Sp4,,B14_DMU,32,intel_a,CATSettings_xxx_R14Sp4_32,CATIA.V5R14.xxx,N:\CAD\CATIA_V5\%CATVERS%\%WIN%
KONF_02,32 bit,R16,Sp5,Hot Fix 46,B16_DMU_32N,32,intel_a,CATSettings_xxx_R16Sp5_32,CATIA.V5R16.xxx,N:\CAD\CATIA_V5\%CATVERS%\%WIN%
KONF_03,64 bit,R18,Sp2,-,B18,64,win_b64,CATSettings_xxx_R18Sp2_64,CATIA.V5R18.xxx,N:\CAD\CATIAV5_64\%CATVERS%\%WIN%
KONF_04,32 bit,R18,Sp3,,B18,32,intel_a,CATSettings_xxx_R18Sp3_32,CATIA.V5R18.xxx,N:\CAD\CATIA_V5\%CATVERS%\%WIN%

Der Batch-File soll nun wie folgt gestartet werden:

start_CATIAV5.bat KONF_01 oder start_CATIAV5.bat KONF_02

Die Variablen sollen über die Konfigurationen.csv definiert werden

Wie ist der Batch-File zu ändern. Ich habe keine Ahnung von for, tokens, delims und findstr aber muss etwas damit zu tun haben.

Danke für eure Hilfe

Stephan Leci

Content-ID: 106599

Url: https://administrator.de/forum/batch-unterschiedliche-variablen-kombinationen-in-xxx-cvs-definieren-106599.html

Ausgedruckt am: 23.12.2024 um 15:12 Uhr

bastla
bastla 20.01.2009 um 18:19:20 Uhr
Goto Top
Hallo prittstift69 und willkommen im Forum!

Das könnte etwa so gehen:
@echo off & setlocal
set "Konf=Konfigurationen.csv"  
findstr /b "%1" "%Konf%">nul || (echo Konfiguration %1 nicht gefunden! & pause & goto :eof)  
for /f "tokens=1-20 delims=," %%a in ('findstr /b "%1" "%Konf%"') do (  
    set "CATVERS=%%f"  
    set "BIT=%%b"  
    set ...
    ....	
)
Die eingelesenen Felder der CSV-Datei sind als %%a, %%b, etc verfügbar.

Für einen nicht vorhandenen Wert solltest Du in der Datei zumindest eine Leerstelle schreiben, da aufeinanderfolgende Trennzeichen (also zwei oder mehr Kommata) nur als ein einziges Trennzeichen interpretiert werden.

Grüße
bastla

P.S.: Ich kann zwar bis 11 zählen, aber falls Du noch weitere Felder hinzufügen musst, brauchst Du (solange es dann insgesamt nicht mehr als 20 sind face-wink) zumindest die Angabe nach "tokens=" nicht anzupassen ...
prittstift69
prittstift69 21.01.2009 um 17:28:58 Uhr
Goto Top
Herzlichen Dank für deine Hilfe, bastla.
Es klappt alles vorzüglich.

Ich habe die doppelten Anführungszeichen in der ersten Zeile mit SET weggelassen, haben die eine bestimmte Funktion?
Ist die Option setlocal wichtig?

set CONFIG_FILE=CATIAV5_config.csv
for /f "tokens=1-20 delims=," %%a in ('findstr /b "%1" "%CONFIG_FILE%"') do (
set CATVERS=%%b
set BIT=%%c
set WIN=%%d
set PROJECT=%%e
set ENV=%%f
set CATInstallPath_short=%%g
)
bastla
bastla 21.01.2009 um 17:42:29 Uhr
Goto Top
Hallo prittstift69!
Ich habe die doppelten Anführungszeichen in der ersten Zeile mit SET weggelassen, haben die eine bestimmte Funktion?
Du kannst diese Anführungszeichen problemlos weglassen - ich verwende sie, da damit genau zu kontrollieren ist, was der Variablen zugewiesen wird (zB zur Vermeidung unerwünschter Leerzeichen am Zeilenende). Abgesehen davon: Wenn sie schon nicht nützen sollten, schaden sie zumindest auch nicht face-wink ...

Ist die Option setlocal wichtig?
Sie ist jedenfalls grundsätzlich zu empfehlen - so bleiben die Inhalte neu erstellter oder veränderter Variablen nur bis zum nächsten "endlocal" (ein solches wird auch beim Ende des Batches automatisch ausgeführt) erhalten - Vorteil: In einem weiteren Batch musst Du nicht daran denken, dass ev eine dieser Variablen bereits existiert und einen vielleicht unerwünschten Wert enthält.

Grüße
bastla