hans.ds
Goto Top

Batch der zwischen Ip-Ranges oder Computernamen unterscheidet und dementsprechenden Standartdrucker auswählt

Hallo Zusammen

Ich will einen Batch schreiben, der die IP-Ranges aussliesst und dementsprechend den richtigen Drucker als Standartdrucker nimmt. Wir haben hier 2 Zimmer und in jedem sind 13 Notebooks. Da sollte nun ein Batch beim Start ausgeführt werden, der auslieest in welchem Zimmer(Range) man sich befindet und dann diesen Drucker als Standart nimmt. Vileicht könnte man es auch mit dem Computernamen einteilen, da sie ebenfalls die Zimmernummer enthalten.

Bis jetzt habe ich ein wenig was rumprobiert, bin aber nie wirklich auf was richtiges gekommen. =(

::Variable setzen
set pc=%computername:~0,6%
set zimmer=%computername:~6,2%
set pcnr=%computername:~9,2%

:: Drucker für Zimmer 23 Mappen
if "%zimmer%"=="23" (  
	rundll32 printui.dll,PrintUIEntry /in /n /y \\10.65.8.199\
)
:: Drucker für Zimmer 24 Mappen
if "%zimmer%"=="24" (  
	rundll32 printui.dll,PrintUIEntry /in /n /y \\10.65.10.199\
)
Details:


IP des ersten Zimmers -> 10.65.8.x
Laptopnamen -> LAPUEK23-01 , LAPUEK23-02, LAPUEK23-03 u.s.w ---> die 23 steht für das Zimmer <---
Drucker -> 10.65.8.199


IP des zweiten Zimmers -> 10.65.10.x
Laptopnamen -> LAPUEK24-01 , LAPUEK24-02, LAPUEK24-03 u.s.w ---> die 24 steht für das Zimmer <---
Drucker -> 10.65.10.199


Bitte um ausführliche Hilfe/Lösungen.

Freundliche Grüsse

Hans

[Edit Biber] Codeformatierung [/Edit]

Content-Key: 182116

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

Printed on: May 7, 2024 at 02:05 o'clock

Member: bastla
bastla Mar 16, 2012 at 15:08:06 (UTC)
Goto Top
Hallo Hans.ds und willkommen im Forum!

Sorry, ich sehe das Problem nicht - Dein Batch sollte doch bereits funktionieren ...

Grüße
bastla
Member: Hans.ds
Hans.ds Mar 16, 2012 at 15:42:57 (UTC)
Goto Top
Eben leider nicht. Ich habe es öfters ausprobiert aber leider ging der Standartdrucker nie. Also es änderte den Drucker nicht. Muss ich ausser der IP Adresse des Druckers noch den Namen oder irgendwas angeben?


Gruss Hans
Member: Hubert.N
Hubert.N Mar 16, 2012 at 15:50:28 (UTC)
Goto Top
Moin

Zitat von @bastla:
Sorry, ich sehe das Problem nicht - Dein Batch sollte doch bereits funktionieren ...


Also ich sehe es schon...

Mit dem Parameter /in wird die Verbindung zu einem freigegebenen Netzwerkdrucker eingerichtet. Dazu gehört dann aber auch der Syntax \\<Server>\<Freigabe>

Gruß

Hubert


edit: Die Zuweisung abhängig von der IP-Adresse ist übrigens denkbar einfach:
ping -4 -n 1 %computername% | find "10.65.8" && rundll32 printui.dll,PrintUIEntry  (...)  
Member: bastla
bastla Mar 16, 2012 at 15:52:59 (UTC)
Goto Top
Hallo Hans.ds!

Hatte leider nur das Zerlegen des Computernamens getestet ...
Muss ich ausser der IP Adresse des Druckers noch den Namen oder irgendwas angeben?
Ja, und vor allem die Parameter in der richtigen Reihenfolge einsetzen - der Name muss nach "/n" angegeben werden, daher diesen Parameter als letzten verwenden ...

Grüße
bastla

[Edit] @hubertn: Jetzt hab ich's auch gesehen [/Edit]
Member: Hans.ds
Hans.ds Mar 16, 2012 at 16:11:42 (UTC)
Goto Top
::Variable setzen

set pc=%computername:~0,6%
set zimmer=%computername:~6,2%
set pcnr=%computername:~9,2%
:: Drucker für Zimmer 23 Mappen
if "%zimmer%"=="23" (
rundll32 printui.dll,PrintUIEntry /in /n Lexmark UEK23 /y 10.65.8.199
)
:: Drucker für Zimmer 24 Mappen
if "%zimmer%"=="24" (
rundll32 printui.dll,PrintUIEntry /in /n Lexmark UEK24 /y
10.65.10.199
)


Wäre das so den nun richtig?
Oder braucht es // vor dem Namen? (Kenn mich da nicht sehr gut aus)


Gruss und ein schönes Wochenende
Member: Hubert.N
Hubert.N Mar 16, 2012 at 16:14:23 (UTC)
Goto Top
Nein

lies mal hier: http://www.gruppenrichtlinien.de/index.html?/howto/rundll32_printui.htm

noch mal edit: irgendwie habe ich auch das Gefühl, dass du keinen Netzwerkdrucker im eigentlichen Sinne hast. Wenn du den Drucker als lokalen Drucker verbinden willst, der über das Netzwerk auf der angegebenen IP erreichbar ist, dann kann das so nicht funktionieren. Dein Script setzt voraus, dass du irgendwo einen Server hast, an dem der Drucker freigegeben ist.
Member: Hans.ds
Hans.ds Mar 21, 2012 at 13:05:48 (UTC)
Goto Top
Hallo Hubert,

Danke für deine Antwort.

Der Druckerbefehl war falsch. Hab ich nun abgeändert. Ich habe nun etwas zusammebgebastelt, jedoch liesst er bei mir nicht die LAN Adresse aus, sonder die Wireless :S Hab das ganze schon umgestellt und durchgeschüttelt aber ich komm auf nichts brauchbares Das Ziel ist es ja, von der LAN Adresse die 3 Oktette auslese zu können und dann damit weiterarbeiten.

Hier die beiden Varianten die ich gemacht habe, aber nicht ganz funktionieren.

Bei diesem hier liesst es die Wlan anstatt die Lan Adresse aus.


@echo off &setlocal
:: IP-Adresse extrahieren. (Auf Win7 die IPv4-Adresse.)
for /f "tokens=2 delims=:" %%i in ('ipconfig^|findstr /i "IPv4-Adresse"') do (
for /f "tokens=3 delims=. " %%j in ("%%i") do set "Range=%%j"
)

:: Was haben wir bis jetzt? (später entfernen)
echo %Range%
pause

:: Drucker verbinden (exemplarisch, Server und Druckerfreigabename anpassen)
:: Drucker verbinden (exemplarisch, Server und Druckerfreigabename anpassen)
if %Range%==8 rundll32 printui.dll,PrintUIEntry /y /n Lexmark_T654_UEK23
if %Range%==10 rundll32 printui.dll,PrintUIEntry /y /n Lexmark_T654_UEK24



Hier gibt es die richtige 3 Oktette, aber komischerweise kann ich sie nacher nicht weiterverwenden. Sobald ich sie mit einem echo &&i ausgebe, funktioniert es wieder garnicht mehr.


@echo off
for /f "tokens=13 skip=6 delims=." %%i in ('ipconfig') do echo %%i & goto out
:out
pause



Danke für Antworten
Member: bastla
bastla Mar 21, 2012 at 14:58:48 (UTC)
Goto Top
Hallo Hans.ds!

Laufvariablen von "for"-Schleifen existieren nur, solange die Schleife noch läuft - aber wenn Du nur den ersten gefundenen Wert verwenden willst, kannst Du so vorgehen:
@echo off & setlocal
set "Range="  
for /f "tokens=13 skip=6 delims=." %%i in ('ipconfig') do if not defined Range set "Range=%%i"  
echo %Range%
Ein "pause" am Ende sollte nicht nötig sein, denn das Testen von Batches wirst Du doch hoffentlich durch Aufruf aus einer CMD-Shell heraus vornehmen ...

Grüße
bastla
Member: Hans.ds
Hans.ds Mar 21, 2012 at 15:56:35 (UTC)
Goto Top
Danke Bastla

Funktioniert einwandfrei!!

Hier noch der fertige Code
@echo off & setlocal
set "Range="  
for /f "tokens=13 skip=6 delims=." %%i in ('ipconfig') do if not defined Range set "Range=%%i"  
echo %Range%


:: Drucker verbinden (exemplarisch, Server und Druckerfreigabename anpassen)
:: Drucker verbinden (exemplarisch, Server und Druckerfreigabename anpassen)
if %Range%==8 rundll32 printui.dll,PrintUIEntry /y /n Lexmark_T654_UEK23
if %Range%==10 rundll32 printui.dll,PrintUIEntry /y /n Lexmark_T654_UEK24
Member: Hans.ds
Hans.ds Mar 23, 2012 at 08:33:15 (UTC)
Goto Top
Habe hier noch eine andere Lösung nun. Da er auch funktionieren würde wenn das 3 Oktett nicht in der 7 Zeile steht..

@echo off & setlocal 
set "Range="  
:: und nun das 3. Oktett aus der 1. gefundenen IPv4 Adresse extrahieren:
for /f "tokens=2 delims=:" %%i in ('ipconfig^|findstr /i "ipv4-adr"') do (  
  for /f "tokens=3 delims=. " %%j in ("%%i") do if not defined Range set "Range=%%j"  
)

echo %Range%



:: Drucker verbinden (exemplarisch, Server und Druckerfreigabename anpassen)
:: Wenn Range auf 8 ist nimmt er UEK23 Drucker, wenn er auch 10 ist, nimmt er UEK24 Zimmer
if %Range%==8 rundll32 printui.dll,PrintUIEntry /y /n Lexmark_T654_UEK23
if %Range%==10 rundll32 printui.dll,PrintUIEntry /y /n Lexmark_T654_UEK24
Member: Hans.ds
Hans.ds Mar 23, 2012 at 08:40:03 (UTC)
Goto Top
Member: Hans.ds
Hans.ds Mar 23, 2012 at 08:41:23 (UTC)
Goto Top