Batch Dateien und Teile mit SED ersetzen

der_paddy

Grünschnabel
Hallo,

ich bin gerade dabei eine Batch datei zu schreiben um Drucker automatisch zu generieren.
Jetzt will ich aus einer csv datei teile herauslesen, da in dieser drinsteht wo der Druckerteiber für den Drucker liegt.
Es handelt sich um etwa 60 verschiedene Drucker. Desahlb soll das dynamisch sein.

Jetzt zu meinem SED-Problem:
Ich habe diese Zeile:
LexT430PCL;Lexmark T430;\Lexmark\T430\v9.4\LMAAN2DA.INF#;;;;;#
will aber nur das haben:
\Lexmark\T430\v9.4\LMAAN2DA.INF

da das der Pfad zur inf datei ist.

sed s/*#.*$//g tempx1.txt >tempx2.txt

So bekomme ich auf jedenfall schonmal den rest hinter dem # weg,
aber wie bekomme ich den vorderen Teil entfernt.
Also: LexT430PCL;Lexmark T430;
meinetwegen auch so: LexT430PCL;Lexmark T430;\

Mit sed bin ich noch nicht ganz der Profi, deshalb setze ich auf euch.

Vielen Dank Jungs

der_paddy
 
Hi.
Ich habe diese Zeile:
LexT430PCL;Lexmark T430;\Lexmark\T430\v9.4\LMAAN2DA.INF#;;;;;#
will aber nur das haben:
\Lexmark\T430\v9.4\LMAAN2DA.INF

da das der Pfad zur inf datei ist.

sed s/*#.*$//g tempx1.txt >tempx2.txt

So bekomme ich auf jedenfall schonmal den rest hinter dem # weg,
Wozu soll denn das erste Sternchen gut sein? Nimm das mal weg. Auch die Option "g" ist relativ sinnlos.
aber wie bekomme ich den vorderen Teil entfernt.
Also: LexT430PCL;Lexmark T430;
Probier's mal so:
Code:
sed 's/^[^;]*;[^;]*;\([^#]*\)#.*/\1/' tempx1.txt

Gruß
 
erstmal danke. wieso das sternchen? das weiß ich leider nicht genau. hat nur mit stern geklappt^^.

Ich weiß nur nicht ob dein Code allgemein klappt.
der weg zur inf datei könnte auch so sein:

Kyo3900DNKX;Kyocera FS-3900DN KX;\Kyocera\KX\v4.1.1805\WIN2K_XP\OEMSETUP.INF;;;;;#
Kyo3900DNPCL;Kyocera FS-3900DN;\Kyocera\MiniPCL\v4.0\Win2K_XP\OEMSETUP.inf;;;;;#
Kyo5900CPCL;Kyocera FS-5900C;\Kyocera\MiniPCL\v4.0\Win2K_XP\OEMSETUP.inf;;;;;#

also eigentlich immer was verschiedenes und ich brauche immer nur den Pfad.
trotzdem schonmal vielen Dank

der_paddy
 
erstmal danke. wieso das sternchen? das weiß ich leider nicht genau. hat nur mit stern geklappt^^.
Was für ein sed verwendest du denn? GNU sed?
Ich weiß nur nicht ob dein Code allgemein klappt.
Warum weißt du das nicht? :confused: Warum probierst du es nicht aus ob es klappt?
der weg zur inf datei könnte auch so sein:

Kyo3900DNKX;Kyocera FS-3900DN KX;\Kyocera\KX\v4.1.1805\WIN2K_XP\OEMSETUP.INF;;;;;#
Warum sind da denn jetzt Semikola vor dem # Zeichen? Ist das ein Fehler oder ist der Fehler in deinem ersten Beitrag?

Gruß
 
Wirklich viel Dank für die Antworten.
Dein erster Post hat auch gleich geklappt.
Ich habe den Post nur zu Hause gelesen und konnte ihn erst in der Firma ausprobieren.
nochmal einen großen Dank.


Das mit dem # war ein fehler in meinem ersten post.
Welche genaue Version ich von SED benutze weiß ich nicht. Müsste aber die GNU sein. Da ich das alles in einer Windowsumgebung mache.

Soweit hat jetzt auch die Druckerinstallation auch geklappt.
Sind noch kleine Mängel drin, die ich jetzt nochmal debuggen muss.

Und nochmal Danke. Konnte zur Zeit gerade mit dem Ding nicht weiterarbeiten, da unser SED Spezi gerade im Urlaub ist.
Hatte nur versucht mir das selber weiterzubauen und richtig geile Hilfe im I-net oder Tutorials habe ich leider auch nicht gefunden.

Der_paddy
 
Schön guten Tag, der_paddy nochmal.

Das erste Problem ist jetzt fertig. Jetzt habe ich aber das nächste.
Ich benutze wieder sed

grep.exe -i -w "%pname%" x:\irgendeinpdad\zueiner\datei\auslese.csv>temp.txt

REM pname wird entfernt
sed s/%pname%;//g temp.txt>temp1.txt

REM alles nach dem ; bis zum Ende wird gelöscht
sed s/[[:blank:]]*;.*$//g temp1.txt>temp2.txt

REM der komplette übrige eintrag wird in die port1.bat Datei geschrieben
sed -n -e "s/^\(.*\)$/@call printername.bat \1/p" temp2.txt>printername1.bat

REM Die temp Dateien werden gelöscht
del *.txt

REM Aufruf der port1.bat
call printername1.bat

Jetzt wird alles aus der einen Zeile ausgelesen und ich erhalte z.B. Lexmark T430
Dieses wird dann in die printername1.bat übergeben und wird immer neu geschrieben.
Diese sieht dann so aus:
@call printername.bat Lexmark T430

in dieser wird dann die printername.bat ausgerufen und das ausgelesene wird mit übergeben. Es wird aber nur Lexmark übergeben und nicht Lexmark T430.
Ich weiß das ich " um das ganze brauche. weiß aber nicht wo ich die setzten soll,
da die printername1.bat ja immer neu geschrieben wird.

printername.bat sieht so aus:
@echo off
if [%1]==[] goto exit
if not [%1]==[#] set printername=%1
REM Die Ausgabe von driver1.bat wird eingelesen und als Druckername definiert definiert
REM Die Variable wird in die dv.bat geschrieben
echo set printername=%printername%>>dv.bat
REM Aufruf der sed_queue.bat
call druckerinstall.bat

:exit


Ich hoffe ich konnte mich einigermaßen deutlich ausdrücken und ich hoffe das man mir helfen kann.

der_paddy
 
Hi.

Die Anführungszeichen solltest du beim Aufruf hinzufügen:

Code:
sed -n -e "s/^\(.*\)$/@call printername.bat '\1'/p" temp2.txt>printername1.bat
Gruß
 
danke für die Antwort. leider habe ich immer noch das gleiche Problem.
Meine sieht jetzt in der printername1.bat

@call printername.bat 'Lexmark T430'

Die printername ist gleichgeblieben, aber die übergabe ist immer noch 'Lexmark und nicht 'Lexmark T430'. Ich will ja wirklich auch nur Lexmark T430 übergeben. Kann auch sein, dass es mal Kyocera Mita FS-1800+ heißt. Ich brauche den ganzen Druckernamen, da dieser in der *.inf Datei steht, die ich ja brauche um die Drucker zu installieren.

lg

der_paddy
 
Ok, mein Fehler - die einfachen Anführungszeichen interessieren den Batch Prozessor nicht. :mad:

Probier's mal so:
Code:
sed -n -e "s/^\(.*\)$/@call printername.bat "\1"/p" temp2.txt>printername1.bat
Gruß

PS: Allerdings ist es dann auch so, das die Anführungszeichen selbst mit dem Parameter übergeben werden. Evtl. müßte man die wieder entfernen....
 
kann ja nicht angehen, was soll das, dass du einen fehler gemacht hast :)

nee, nur ein scherz.
sed -n -e "s/^\(.*\)$/@call printername.bat "\1"/p" temp2.txt>printername1.bat

hatte ich auch schon versucht, nachdem ich deinen vorigen Post gelesen habe.
Jetzt habe ich aber das "Glück" das dieser Aufruf zwar funktioniert, aber SED die " einfach entfernt.


Allgemein ist das hier mein letzter Schritt der Installation. Ich dachte es wäre genauso einfach wie die anderen. Leider habe ich mit dem Befehl bis jetzt die größten Probleme. Nochmals danke für deine Hilfe.

der_paddy
 
Zurück