# Batch Dateien und Teile mit SED ersetzen



## der_paddy (17. Oktober 2007)

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


----------



## deepthroat (17. Oktober 2007)

Hi.





der_paddy hat gesagt.:


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


Wozu soll denn das erste Sternchen gut sein? Nimm das mal weg. Auch die Option "g" ist relativ sinnlos.


der_paddy hat gesagt.:


> aber wie bekomme ich den vorderen Teil entfernt.
> Also: LexT430PCL;Lexmark T430;


Probier's mal so:
	
	
	



```
sed 's/^[^;]*;[^;]*;\([^#]*\)#.*/\1/' tempx1.txt
```

Gruß


----------



## der_paddy (18. Oktober 2007)

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


----------



## deepthroat (18. Oktober 2007)

der_paddy hat gesagt.:


> 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?


der_paddy hat gesagt.:


> Ich weiß nur nicht ob dein Code allgemein klappt.


Warum weißt du das nicht?  Warum probierst du es nicht aus ob es klappt?


der_paddy hat gesagt.:


> 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ß


----------



## der_paddy (18. Oktober 2007)

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


----------



## der_paddy (23. Oktober 2007)

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
> ...



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
> ...




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

der_paddy


----------



## deepthroat (23. Oktober 2007)

Hi.

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


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


----------



## der_paddy (24. Oktober 2007)

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


----------



## deepthroat (24. Oktober 2007)

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

Probier's mal so:

```
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....


----------



## der_paddy (24. Oktober 2007)

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


----------



## deepthroat (24. Oktober 2007)

der_paddy hat gesagt.:


> kann ja nicht angehen, was soll das, dass du einen fehler gemacht hast
> 
> nee, nur ein scherz.


Hast ja Recht... 

OK, hab's grad ausprobiert. Man muss die Anführungszeichen für SED noch entwerten:

```
sed -n -e "s/^\(.*\)$/@call printername.bat \"\1\"/p" temp2.txt>printername1.bat
```
Gruß


----------



## der_paddy (24. Oktober 2007)

super, vielen dank.
ich werde das mal morgen auf der arbeit probieren.

wenn es geht bekommst du ein cyberbier )

der_paddy

edit:// es geht super. Jetzt muss ich das nur noch auf die Terminalserver umsetzten und probieren ob es mit allen Druckertypen und Treibern möglich ist


----------

