narthan
Goto Top

Con2prt.exe Problem mit Zeilenumbruch (Batchcode)

Moin moin,

Ich habe folgendes Problem:
Ich möchte mithilfe von CMD und con2prt.exe alle derzeitigen Netzwerkdrucker entfernen und diese in eine .txt Datei speichern. Da wir einen neuen Printserver haben, möchte ich nun aus der .txt die Werte wieder rausholen, den ALTEN Server durch den NEUEN Server ersetzen und mithilfe von con2prt.exe die zuvor verfügbaren Drucker nun vom NEUEN Printserver wieder verbinden.

So sieht's bei mir bis jetzt aus:

C:\Windows\system32>for /f "tokens=5 delims= " %i in (C:\Drucker.txt) do @echo %i  
\\ALTERDRUCKSERVER\DRUCKER1
\\ALTERDRUCKSERVER\DRUCKER2

----

C:\Windows\system32>C:\Users\user123\Desktop\con2prt.exe

CON2PRT: Lets the user disconnect all existing connections to Windows NT
         printers and connect to newly specified Windows NT printers.

Usage: CON2PRT [ /? | /h | /f |
                   [/c \\printserver\share | /cd \\printserver\share]+]
       where:

       /?  - displays usage.
       /h  - displays usage.
       /f  - deletes all existing printer connections.
       /c  - connects to \\printserver\share printer.
       /cd - connects to \\printserver\share printer and sets it as the default
             printer.

C:\Windows\system32>for /f "tokens=5 delims= " %i in (C:\drucker.txt) do C:\Users\use123\Desktop\con2prt.exe  
 /c %i

 :\Windows\system32>C:\Users\user123\Desktop\con2prt.exe /c \\ALTERDRUCKSERVER\DRUCKER1
.ailed to connect to Windows NT printer: \\ALTERDRUCKSERVER\DRUCKER1
Please check to see that the printer exists.

 :\Windows\system32>C:\Users\user123\Desktop\con2prt.exe /c \\ALTERDRUCKSERVER\DRUCKER2
.ailed to connect to Windows NT printer: \\ALTERDRUCKSERVER\DRUCKER2
Please check to see that the printer exists.

----

C:\Windows\system32>C:\Users\user123\Desktop\con2prt.exe /c \\ALTERDRUCKSERVER\DRUCKER1
Connected to printer: \\ALTERDRUCKSERVER\DRUCKER1.

Als Erklärung:
Zurerst habe ich die installierten Netzwerkdrucker mit "con2prt.exe /f > C:\drucker.txt" gelöscht und in die TXT Datei drucker.txt gespeichert, in der folgendes steht:
"Removed connection to printer: \\ALTERDRUCKSERVER\DRUCKER1
Removed connection to printer: \\ALTERDRUCKSERVER\DRUCKER2"

Da ich für con2prt.exe jedoch nur Servername und Drucker brauche, verwende ich die For Schleife mit Begrenzung auf Token 5 und delimiter Leerzeichen. Speichere dies in Variable.
Daraufhin will ich mit
C:\Windows\system32>for /f "tokens=5 delims= " %i in (C:\drucker.txt) do C:\Users\user123\Desktop\con2prt.exe  
 /c %i
die Drucker verbinden (Ich habe hier noch nicht versucht, den ALTEN auf NEUEN Druckserver zu ändern, weil ich erstmal versuchen wollte, ob es überhaupt so funktionieren kann). Dabei kam allerdings die oben zu sehende Fehlermeldung...

Meine Vermutung: --> Zeilenumbrüche in der TXT Datei ! <--

Ich also 2.Zeile in der TXT Datei gelöscht, sodass nur eine Zeile, sprich ein Drucker drin ist, und er stellte die Verbindung ohne jegliche Fehlermeldung her.


Weiß jemand, wie ich diesen Fehler umgehen kann, sodass mehrere Zeilen aus der TXT Datei ausgelesen und bearbeitet werden können?
Weiß jemand evtl auch, wie ich die Werte aus der TXT Datei lesen, und den ALTEN Druckserver in den NEUEN dabei ändern kann? (evtl. über in neue Variable speichern, wenn im Namen des ALTEN bestimmte Zahlen entdeckt werden?)


Grüße, narthan

Content-ID: 223647

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

Ausgedruckt am: 08.11.2024 um 11:11 Uhr

Endoro
Lösung Endoro 05.12.2013, aktualisiert am 06.12.2013 um 09:21:17 Uhr
Goto Top
Hey,
wenn man sich den Hexdump vom con2prt Output ansieht, fallen die EOL-Markierungen auf:

df24f100bf9aa98a42a7365e25d5eab0

Die stören die Verarbeitung in for Schleifen. Abhilfe: Text mit sed oder tr bearbeiten:

sed s/\xd// INPUT.TXT > OUTPUT.TXT
< INPUT.TXT tr -s \r > OUTPUT.TXT
lg.
narthan
narthan 05.12.2013 aktualisiert um 14:04:29 Uhr
Goto Top
Hey Endoro,

danke erstmal für die Antwort!
Ich habe mal nach sed und tr gegoogled, da ich beides nicht kenne und bin auf Unix Programme (oder Erweiterungen?) gestoßen.
Muss ich diese herunterladen oder lieg ich komplett falsch und muss ich das über einen Text Editor machen?

Gruß, narthan

edit: ich habe Windows 7 64bit
Endoro
Endoro 05.12.2013 um 14:13:51 Uhr
Goto Top
Das sind ursprünglich Unix-Programme: sed for Windows, tr ist hier bei: CoreUtils for Windows. Ältere Versionen ohne Installations"zwang" gibts hier.
lg.
narthan
narthan 05.12.2013 um 14:34:12 Uhr
Goto Top
Super danke!

Hab sed installiert und mit cmd gestartet und deinen obigen Quelltext wie folgt ausgeführt:

C:\Users\user>"C:\Program Files (x86)\GnuWin32\bin\sed.exe" s/\xd// C:\drucker.txt > druckerSED.txt   

Hab ich einen Denkfehler? :D Weil irgendwie passiert nichts beim Ausführen und es kommt auch keine Fehlermeldung..

Gruß, narthan
Endoro
Endoro 05.12.2013 um 14:46:53 Uhr
Goto Top
sed ist ein ordentliches Programm, es belästigt dich nicht mit Fehlermeldungen, wenn alles OK ist face-smile
Das Ergebnis ist nun in druckerSED.txt anzusehen.
narthan
narthan 05.12.2013 aktualisiert um 14:51:00 Uhr
Goto Top
Zitat von @Endoro:

sed ist ein ordentliches Programm, es belästigt dich nicht mit Fehlermeldungen, wenn alles OK ist face-smile
Das Ergebnis ist nun in druckerSED.txt anzusehen.

Da bin ich ja beruhigt ;) Leider wurde die druckerSED.txt nicht erzeugt, ist nicht da. face-sad


Edit: bei erneutem Ausführen unter Admin Rechten bekam ich nun folgende Fehlermeldung:
"sed.exe: -e Ausdruck #1, Zeichen 3: Nicht beendeter `s'-Befehl"
Endoro
Lösung Endoro 05.12.2013, aktualisiert am 06.12.2013 um 09:21:26 Uhr
Goto Top
Es könnte helfen, ein paar Zollzeichen zu setzen:
sed "s/\xd//" "INPUT.TXT" > "OUTPUT.TXT"  

Welches sed hast du genommen?
lg.
Endoro
Endoro 05.12.2013 um 16:37:28 Uhr
Goto Top
Hmm, ich sehe gerade, dass sich die zwei von mir verlinkten sed's unterschiedlich verhalten face-sad
Nimm entweder dieses sed for Windows oder tr, damit gibt's keine Probleme.
lg.
narthan
narthan 06.12.2013 aktualisiert um 09:21:06 Uhr
Goto Top
Moin Endoro,

ja genau die Version habe ich benutzt, aber perfekt, dank deinem editierten Quelltext hat es nun funktioniert und auch con2prt hat nicht mehr gemeckert face-smile

Jetzt muss ich nur noch irgendwie den alten Druckerserver Namen durch den neuen ersetzen..

Danke dir erstmal!

Gruß, narthan


Edit: Okay habs geschafft! face-smile

Via Google folgenden Link zum Ersetzen von Wörtern in Text Dateien gefunden (http://www.supportnet.de/fresh/2007/1/id1481757.asp) und das dort vorhandene Skript übernommen und angepasst. Endlich können nun die Drucker der Clients auf den neuen Druckserver via Anmeldeskript umgesiedelt werden, ohne dass ich es manuell und zu Fuß erledigen muss. face-smile


Danke dir nochmal Endoro ;)