blacksaber
Goto Top

Variable mit awk befüllen

AWK und Unix-Tools auf Windows-Konsole

Hallo zusammen,
ich hoffe das mir hier einer helfen kann.

Ich habe folgende Anweisung:
 cat download.xml | sed s/_/./g | grep "Releaseversion" | awk -v FS="Releaseversion: " "{print $2}" | awk -v FS="\"" "{print $1}"  
Diese liefert mir einen Wert der so aussieht:
3.3.12
Ich versuche jetzt schon seit Stunden dieses Ergebnis in eine Variable umzuleiten und es gelingt mir einfach nicht.
Ich brauche diesen String in der Variable AVX_VER die ich auch im Vorfeld mittels
 set AVX_VER=text
angelegt habe.

Diese Variable benötige ich um bei einem weiteren Programmaufruf die Versionsnummer mit zu übergeben.
Das alles soll in einem BATCH-File ablaufen und eben mit der Windows-Konsole funktionieren da wir hier nur mit Windows-Clients (XP) arbeiten.

Vielen Dank schon mal auch wenn hier für ein Windows-Problem die Unixer belästigen muß... face-smile

gruß
Klaus

Content-Key: 101743

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

Ausgedruckt am: 28.03.2024 um 17:03 Uhr

Mitglied: Biber
Biber 13.11.2008 um 14:47:32 Uhr
Goto Top
Moin Klaus,

wenn ich Dich richtig verstanden habe, ist das erste kryptische Geraffel ("cat download...") eine Winows-Batch-Zeile, die als Output den String "3.3.1.2." auf den Bildschirm zaubert?

Wenn ja, da würde folgende batchzeile diese Ausgabe in eine Variable trümmern:
::.... irgendein.cmd
....
FOR /F %%i in ('cat download ......bla...') do set "AVX_VER=%%i"  
::test
echo Variablenwert AVX_VER: [%AVX_VER%]

Mit nur einem %-zeichen vor der laufvariablen (%i statt %%i) kannst Du es auch am CMD-Prompt testen.

Grüße
Biber
Mitglied: Blacksaber
Blacksaber 13.11.2008 um 15:19:21 Uhr
Goto Top
Danke für den Hint, aber leider tut er es nicht... face-sad

Das mit der ersten Zeile hast du richtig verstanden. Ich suche in einer Datei eine Zeile und diese bearbeite ich dann um z.B. auf das Ergebnis 3.3.12 zu kommen.

Mittlerweile habe ich versucht das ganze aufzudröseln. Deshalb sieht der Aufruf jetzt etwas anders aus. Das Ergebnis ist aber immer noch das gleiche.

Ich habe jetzt deinen Code mal mitverarbeitet:
 FOR /F %%i in ('cat version.txt | awk -v FS="Releaseversion: " "{print $2}" | awk -v FS="\"" "{print $1}"') do set "AVX_VER=%%i"  
ich bekomme dann allerdings die Meldung:
 "%%i" ist syntaktisch an dieser Stelle nicht verarbeitbar.  
Vielleicht hilft es wenn ich mal die komplette .bat hier poste:
 :: Setzen der Variablen und Initialbefüllung
 set AVX_VER=3.5.x

 :: Versionsnummer in Datei schreiben
 cat "%USERPROFILE%\lokale Einstellungen\Audiworkbench\Testumgebung\configuration\download.xml" | sed s/_/./g | grep "Releaseversion" > version.txt  

 :: Version aus Datei auslesen
 cat version.txt | awk -v FS="Releaseversion: " "{print $2}" | awk -v FS="\"" "{print $1}"  

 ::Starten der Applikation (hier wird AVX_VER benötigt)
 ::EOF
Mitglied: paulepank
paulepank 13.11.2008 um 15:45:10 Uhr
Goto Top
Hallo Klaus.

"%%i" ist syntaktisch an dieser Stelle nicht verarbeitbar.

kommt daher, daß Sonderzeichen mit ^ maskiert werden müssen.
Das Pipezeichen | ist so eins, also ^| schreiben.

Vielleicht hilft es wenn ich mal die komplette .bat hier poste:

die download.xml wäre vielleicht effektiver. Du hast mit Sicherheit einige Pipe zuviel face-smile

und schön die Code-Formatierung benutzen.

Edit: oder 'n Link, wo man sich die xml runterladen kann.

cu paulepank
Mitglied: Blacksaber
Blacksaber 13.11.2008 um 17:16:57 Uhr
Goto Top
Hallo paulepank,

der String der aus der download.xml extrahiert wird lautet:
 <downloadfiles workbenchVersion="3.3.12 Releaseversion: 3.3.12" buildID="2008-10-10" update="enabled">  
Die Anweisung extrahiert sauber die Versionnummer die ich brauche. Hat aber natürlich keinen Anspruch perfekt zu sein. Für mich ist es einfach wichtig das ich auf einer CMD den Wert 3.3.12 in einer Variablen habe, damit ich anschließend diese im Applikationsstart nutzen kann.

Dein Tipp mit ^ hat leider auch nicht geklappt. Bekomme die gleiche Fehlermeldung wie bei Biber auch. Ich werde das allerdings jetzt auch nochmal auf einer anderen Maschine verfizieren. Ich werde hier berichten.

Danke schon mal. Weitere Tipps sind natürlich gerne willkommen.

Gruß
Klaus
Mitglied: paulepank
paulepank 13.11.2008 um 18:22:08 Uhr
Goto Top
Naja, nachdem wir Testdaten haben

1. das > am Zeilenende stört --> Workaround mit sed s/^>//g
2. FS="\"" funktioniert in der CMD so auch nicht.

Das wäre noch eine Pipe mehr. Das ist doch ein Gewurschtel.
Da du ja mit sed zunächst noch ein _ ersetzt, trägt dein "String" auch nichts
zur Lösung bei.
Also sende einen Link zum xml-File oder wenn nicht zu groß hier veröffentlichen.
Alles andere ist Flickschusterei.

cu paulepank
Mitglied: Biber
Biber 13.11.2008 um 18:29:58 Uhr
Goto Top
..oder Du lässt Deinen funktionierenden Batch so wie er ist und rufst ihn so auf:

[CMD-Prompt]
For %i in ('D:\einPfad\Dein.bat') do set "AXV_VER=%i"
Batch:
For %%i in ('D:\einPfad\Dein.bat') do set "AXV_VER=%%i"

Grüße
Biber
Mitglied: paulepank
paulepank 13.11.2008 um 19:47:09 Uhr
Goto Top
...oder so:

für den Datensatz
<downloadfiles workbenchVersion="3.3.12 Releaseversion: 3.3.12" buildID="2008-10-10" update="enabled">  
diesen Code
:: Version aus Datei auslesen
for /f "tokens=4" %%i in ('cat version.txt^|sed s/[\^"\^>\^<]//g')  do set AXV_VER=%%i  

Was für ein Gemähre face-smile

cu paulepank
Mitglied: Blacksaber
Blacksaber 14.11.2008 um 09:50:13 Uhr
Goto Top
Zuerst mal vielen Dank für die Tipps.
Bin noch nicht zum testen gekommen, werde ich aber jetzt dann gleich nachholen.

In der .xml steht nicht sehr viel mehr drin. Die Zeile ist die 2 Zeile im File und wird komplett ausgelesen.

<?xml version="1.0" encoding="ASCII"?> 
<downloadfiles workbenchVersion="3_3_12 Releaseversion: 3_3_12" buildID="2008-10-10" update="enabled"> 
	
	<!-- Bei einem Update muessen die folgenden Parameter geaendert werden -->
	<!-- - Dateiname, damit eine Aenderung erkannt wird -->
	<!-- - id wird aufsteigend nummeriert, bei neuen dateien -->
	<!-- - installDir (muss ein anderes Verzeichnis vergeben werden, wegen Filelock!!!) -->
Mehr kann und darf ich hier nicht veröffentlichen. Es folgen noch etwa 30 Zeilen die mit meinem Problem aber nichts zu tun haben.
Was ich mit meinem SED mache, ist daß ich die Unterstriche aus der Versionsnummer in Punkte umwandle.


Anmerkung:
Jetzt hab ich auch endlich die Formatierung für "code" gefunden. Werde den Rest noch nacheditieren.
Mitglied: Blacksaber
Blacksaber 14.11.2008 um 10:55:27 Uhr
Goto Top
Es ist zum Verzweifeln.

Es klappt immer noch nicht.

M:\Daten\testen>echo %AVX_VER%
leer

M:\Daten\testen>For %i in ('M:\Daten\meine.bat') do set "AXV_VER=%i"  

M:\Daten\testen>set "AXV_VER='M:\Daten\testen\meine.bat'"  

M:\Daten\testen>echo %AVX_VER%
leer

Das ist aus meiner Konsole kopiert. face-sad

Oder ich bekomme bei folgendem Aufruf:

M:\Daten\testen>for /f "tokens=4" %%i in ('cat version.txt^|sed s/[\^"\^>\^<]//g')  do set AXV_VER=%%i  
"%%i" ist syntaktisch an dieser Stelle nicht verarbeitbar.  

Ebenfalls aus der Konsole kopiert. face-sad

Also ich bin jetzt mit meinem Latein komplett am Ende.
Hat vielleicht irgendjemand noch eine Idee wie ich aus dem .xml den Wert den ich benötige in eine Variable bekomme?
Ich bin für alles offen. Es muß nur von jedem Rechner ohne vorher was zu installieren laufen.

Vielen Dank...

ein niedergeschlagener Klaus
Mitglied: Biber
Biber 14.11.2008 um 11:36:04 Uhr
Goto Top
Sorry, Klaus/Blacksaber,

ist mein Fehler,

Ersetze: For %i in ('M:\Daten\meine.bat') do set "AXV_VER=%i"
Durch For /F %i in ('M:\Daten\meine.bat') do set "AXV_VER=%i" :

Ein wegen der unnötigen Verzögerung auch ganz niedergeschlagener
Biber

P.S. BTW - Du setzt bzw. fragst ab zwei unterschiedliche Variablen AVX_VER und AXV_VER....
Mitglied: paulepank
paulepank 14.11.2008 um 12:12:48 Uhr
Goto Top
Hallo,

"%%i" ist syntaktisch an dieser Stelle nicht verarbeitbar.

der Code war für die Batch gedacht.
%i am Prompt
%%i in der Batch

Das sollte aber klar sein !

cu paulepank
Mitglied: Blacksaber
Blacksaber 14.11.2008 um 13:09:01 Uhr
Goto Top
Juhu!!!!

Vielen, vielen Dank.
Ich habe wieder einiges gelernt und dank euch bin ich doch noch zum Erfolg gekommen.

@Biber
Danke für deine Hilfe und so ein Fehler kann passieren. Bin sehr froh das ihr mir überhaupt geholfen habt. face-smile
Danke für den Hinweis mit der Variablen. Da hat sich ein Buchstabendreher eingeschlichen. Wäre mir nicht mehr aufgefallen...

@paulepank
Das mit den %% war mir nicht klar. Ich kannte diese Geschichte noch gar nicht. Aber danke für den Hinweis, wieder was gelernt.
Auch dir vielen Dank für die Hilfe.