Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Variable mit awk befüllen

Frage Linux Linux Tools

Mitglied: Blacksaber

Blacksaber (Level 1) - Jetzt verbinden

13.11.2008, aktualisiert 14.11.2008, 6988 Aufrufe, 12 Kommentare

AWK und Unix-Tools auf Windows-Konsole

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

Ich habe folgende Anweisung:
01.
 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:
01.
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
01.
 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ß...

gruß
Klaus
Mitglied: Biber
13.11.2008 um 14:47 Uhr
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:
01.
::.... irgendein.cmd 
02.
.... 
03.
FOR /F %%i in ('cat download ......bla...') do set "AVX_VER=%%i" 
04.
::test 
05.
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
Bitte warten ..
Mitglied: Blacksaber
13.11.2008 um 15:19 Uhr
Danke für den Hint, aber leider tut er es nicht...

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:
01.
 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:
01.
 "%%i" ist syntaktisch an dieser Stelle nicht verarbeitbar.
Vielleicht hilft es wenn ich mal die komplette .bat hier poste:
01.
 :: Setzen der Variablen und Initialbefüllung 
02.
 set AVX_VER=3.5.x 
03.
 
04.
 :: Versionsnummer in Datei schreiben 
05.
 cat "%USERPROFILE%\lokale Einstellungen\Audiworkbench\Testumgebung\configuration\download.xml" | sed s/_/./g | grep "Releaseversion" > version.txt 
06.
 
07.
 :: Version aus Datei auslesen 
08.
 cat version.txt | awk -v FS="Releaseversion: " "{print $2}" | awk -v FS="\"" "{print $1}" 
09.
 
10.
 ::Starten der Applikation (hier wird AVX_VER benötigt) 
11.
 ::EOF
Bitte warten ..
Mitglied: paulepank
13.11.2008 um 15:45 Uhr
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

und schön die Code-Formatierung benutzen.

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

cu paulepank
Bitte warten ..
Mitglied: Blacksaber
13.11.2008 um 17:16 Uhr
Hallo paulepank,

der String der aus der download.xml extrahiert wird lautet:
01.
 <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
Bitte warten ..
Mitglied: paulepank
13.11.2008 um 18:22 Uhr
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
Bitte warten ..
Mitglied: Biber
13.11.2008 um 18:29 Uhr
..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
Bitte warten ..
Mitglied: paulepank
13.11.2008 um 19:47 Uhr
...oder so:

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

cu paulepank
Bitte warten ..
Mitglied: Blacksaber
14.11.2008 um 09:50 Uhr
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.

01.
<?xml version="1.0" encoding="ASCII"?> 
02.
<downloadfiles workbenchVersion="3_3_12 Releaseversion: 3_3_12" buildID="2008-10-10" update="enabled"> 
03.
	 
04.
	<!-- Bei einem Update muessen die folgenden Parameter geaendert werden --> 
05.
	<!-- - Dateiname, damit eine Aenderung erkannt wird --> 
06.
	<!-- - id wird aufsteigend nummeriert, bei neuen dateien --> 
07.
	<!-- - 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.
Bitte warten ..
Mitglied: Blacksaber
14.11.2008 um 10:55 Uhr
Es ist zum Verzweifeln.

Es klappt immer noch nicht.

01.
M:\Daten\testen>echo %AVX_VER% 
02.
leer 
03.
 
04.
M:\Daten\testen>For %i in ('M:\Daten\meine.bat') do set "AXV_VER=%i" 
05.
 
06.
M:\Daten\testen>set "AXV_VER='M:\Daten\testen\meine.bat'" 
07.
 
08.
M:\Daten\testen>echo %AVX_VER% 
09.
leer
Das ist aus meiner Konsole kopiert.

Oder ich bekomme bei folgendem Aufruf:

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

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
Bitte warten ..
Mitglied: Biber
14.11.2008 um 11:36 Uhr
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....
Bitte warten ..
Mitglied: paulepank
14.11.2008 um 12:12 Uhr
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
Bitte warten ..
Mitglied: Blacksaber
14.11.2008 um 13:09 Uhr
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.
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.
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
JavaScript
AngularJS Variable über Input in Funktion ausführen

Frage von badkilla zum Thema JavaScript ...

Batch & Shell
Batch-Variable nach Stichworten aus TXT Datei durchsuchen (3)

Frage von Markus5579 zum Thema Batch & Shell ...

Batch & Shell
gelöst Selected Gridview Value in Variable schreiben (4)

Frage von reissaus73 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...