72417
Goto Top

Batchsyntax unterschiedlich zwischen Win7 und XP?

Moin Moin,
in meinem anderen Thema habe ich das Problem der Druckerinstallation über Windowsconsole behandelt, damit bin ich fertig geworden. Nun beiße ich mir grade an meinen ersten Gehversuchen unter Batchprogrammierung die Zähne aus.
Hier mein Script (wie es unter Win7 funktioniert) und welches nicht unter Win XP läuft.
Vielleicht hat jemand ja einen Rat.

@echo off
for /F "tokens=13,* delims=:" %%n in ('ipconfig^|find /I "IPv4-Adresse"') do set IP=%%n  
	 if %IP% == 10.1.1.55 (
		rundll32 printui.dll,PrintUIEntry /if /b "Drucker_0552" /f %windir%\druckertreiber\oki\5450n\OK72s2lu.inf /r "usb001" /m "OKI C5450n(PCL)"  
	)else (
			echo."Fehlgeschlagen, Meine IP:%IP% (erwartet:10.1.1.55)"  
		)
pause

Wie gesagt, unter Win7 funktioniert es insoweit, dass er mir die Fehlermeldung ausgibt, was auch gut ist.

Unter XP habe ich es leicht abgeändert (keine native IPv6 Unterstützung deswegen muss man nach was anderem suchen ;) )
Das Script:

@echo off
for /F "tokens=13,* delims=:" %%n in ('ipconfig^|find /I "IP"') do set IP=%%n  
	 if %IP% == 10.1.1.55 (
		rundll32 printui.dll,PrintUIEntry /if /b "Drucker_0552" /f %windir%\druckertreiber\oki\5450n\OK72s2lu.inf /r "usb001" /m "OKI C5450n(PCL)"  
	)else (
			echo."Fehlgeschlagen, Meine IP:%IP% (erwartet:10.1.1.55)"  
		)
pause

Mein Problem ist, dass er die Variable nicht setzt, also zum Vergleich:

for /F "tokens=13,* delims=:" %%n in ('ipconfig^|find /I "IP"') do set IP=%%n  
	 echo.%IP%
führt er schon nicht aus, als Ausgabe kommt eine Leerzeile,sprich er setzt die Variable nichteinmal.

Jemand einen Rat?

MfG
Chris

Content-Key: 151626

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

Ausgedruckt am: 28.03.2024 um 08:03 Uhr

Mitglied: TheJoker2305
TheJoker2305 23.09.2010 um 13:20:22 Uhr
Goto Top
Wird die Batchdatei mit den gleichen Benutzerberechtiggung (Admin) ausgeführt?
Mitglied: 72417
72417 23.09.2010 um 13:21:56 Uhr
Goto Top
Jap,zwar andere Namen,aber beides sind lokale Adminstratoren.
Zumal ich manuell auf Variablen setzen kann auf dem XP Client
zB:
set IP=%%TMP

und schon setzt er die Variable IP mit dem aktuellen Temp-Verzeichnis gleich. face-sad
Mitglied: 60730
60730 23.09.2010 um 14:17:14 Uhr
Goto Top
Moin,

das mit echo off - bei Problemchenbätchen ist mein alter Hut...

1.001 Wege nach Rom

for /F "tokens=2,3,4,5 delims=:. " %%a in ('ipconfig^|find /I "IP"') do set IP=%%a.%%b.%%c.%%d  
for /F "tokens=3-6 delims=:. " %a in ('ping %computername%^|find "TTL"') do set IP=%%a.%%b.%%c.%%d  
Und dann natürlich auch: - denn %windir%\druckertreiber\oki\ ist kein std.
if exist %windir%\druckertreiber\oki\5450n\OK72s2lu.inf rundll32 printui.dll,PrintUIEntry /if /b "Drucker_0552" /f %windir%\druckertreiber\oki\5450n\OK72s2lu.inf  


Gruß

edit @ tse schoka: IPconfig kann - darf jeder Dau - die Gegenfrage war also leicht flüssiger als flüssig überflüssig /edit
Mitglied: 72417
72417 24.09.2010 um 10:28:43 Uhr
Goto Top
Moin Moin, vielen Dank schonmal für die Hilfe. face-smile
ich habe das Script (scheinbar fertig). Funktioniert auch, zumindest bei dem Testclient.
Ich kann euch nicht sagen warum, aber bei dem Druckermodell Brother DCP 7030 streikt das script. Angeblich kann Windows keinen passenden Treiber finden, wenn ich den Drucker jedoch händisch einrichte nehme ich exakt den Treiber, wie er in der Batch steht.
Weiß jemand weiter? Also,

:: Die Batchdatei für automatische Druckerinstallation

@echo off
:: Hier wird die IP ausgelesen und in die Variable "IP" abgespeichert
for /F "tokens=2,3,4,5 delims=:. " %%a in ('ipconfig^|find /I "IP"') do set IP=%%a.%%b.%%c.%%d

:: Nun beginnt er seine Schleife und testet die Variable ob die eigene IP bei den Gesuchten dabei ist

::Drucker Installation für den Raum R_Test
if %IP% == 10.1.1.28 (rundll32 printui.dll,PrintUIEntry /if /Z /b "Drucker_test" /f %windir%\druckertreiber\oki\C5450n\Ok72s2lu.inf /r "usb001" /m "OKI C5450n(PCL)" )else (
::Drucker Installation für den Raum R_0524
if %IP% == 10.1.1.34 (rundll32 printui.dll,PrintUIEntry /if /Z /b "Drucker_R0524" /f %windir%\druckertreiber\brother\7030\brpr7030.inf /r "usb001" /m "DCP-7030" )else (
::Drucker Installation für den Raum R_0532
if %IP% == 10.1.1.42 (rundll32 printui.dll,PrintUIEntry /if /Z /b "Drucker_R0532" /f %windir%\druckertreiber\brother\7030\brpr7030.inf /r "usb001" /m "DCP-7030")else (
::Drucker Installation für den Raum R_0542
if %IP% == 10.1.1.53 (rundll32 printui.dll,PrintUIEntry /if /Z /b "Drucker_R0542" /f %windir%\druckertreiber\brother\7030\brpr7030.inf /r "usb001" /m "DCP-7030")else (
::Drucker Installation für den Raum R_1534
if %IP% == 10.1.1.66 (rundll32 printui.dll,PrintUIEntry /if /Z /b "Drucker_R1534" /f %windir%\druckertreiber\brother\1450\OEMHL01A.INF /r "usb001" /m "Brother HL-1450 series")else (
::Drucker Installation für den Raum R_1544
if %IP% == 10.1.1.73 (rundll32 printui.dll,PrintUIEntry /if /Z /b "Drucker_R1544" /f %windir%\druckertreiber\brother\1450\OEMHL01A.INF /r "usb001" /m "Brother HL-1450 series")else (
::Drucker Installation für den Raum R_1550
if %IP% == 10.1.1.82 (rundll32 printui.dll,PrintUIEntry /if /Z /b "Drucker_R1550" /f %windir%\druckertreiber\oki\B4350\B43503e.inf /r "usb002" /m "OKI B4350(PCL)")else (
::Beendung der Schleife mit einem Log für den jeweiligen Client
echo.An diesem Computer ist kein Drucker angeschlossen > log_%COMPUTERNAME%.txt
)
)
)
)
)
)
)
Mitglied: 60730
60730 24.09.2010 um 17:06:09 Uhr
Goto Top
Moin,

bitte schreibe deine Batch in Code Blöcke...(siehe Formatierungshilfe)

Ich vermute deine Else ist zu komplex - möglicherweise auch nicht.

Try this one

Rem Teststatus kein @echo off

:: Hier wird die IP ausgelesen und in die Variable "IP" abgespeichert  
Rem for /F "tokens=2,3,4,5 delims=:. " %%a in ('ipconfig^|find /I "IP"') do set IP=%%a.%%b.%%c.%%d  
Rem da es wohl es nur um das letzte Oktet geht...
 for /F "tokens=5 delims=:. " %%a in ('ipconfig^|find /I "IP"') do set IP=%%a  

:: Nun beginnt er seine Abfrage und testet die Variable ob die eigene IP bei den Gesuchten dabei ist

::Drucker Installation für den Raum R_Test
if "%IP%"=="28" rundll32 printui.dll,PrintUIEntry /if /Z /b "Drucker_test" /f %windir%\druckertreiber\oki\C5450n\Ok72s2lu.inf /r "usb001" /m "OKI C5450n(PCL)" && goto end  

::Drucker Installation für den Raum R_0524
if "%IP%"=="34" rundll32 printui.dll,PrintUIEntry /if /Z /b "Drucker_R0524" /f %windir%\druckertreiber\brother\7030\brpr7030.inf /r "usb001" /m "DCP-7030" && goto end  

::Drucker Installation für den Raum R_0532
if "%IP%"=="42" rundll32 printui.dll,PrintUIEntry /if /Z /b "Drucker_R0532" /f %windir%\druckertreiber\brother\7030\brpr7030.inf /r "usb001" /m "DCP-7030" && goto end  

::Drucker Installation für den Raum R_0542
if "%IP%"=="53" rundll32 printui.dll,PrintUIEntry /if /Z /b "Drucker_R0542" /f %windir%\druckertreiber\brother\7030\brpr7030.inf /r "usb001" /m "DCP-7030" && goto end  

::Drucker Installation für den Raum R_1534
if "%IP%"=="66" rundll32 printui.dll,PrintUIEntry /if /Z /b "Drucker_R1534" /f %windir%\druckertreiber\brother\1450\OEMHL01A.INF /r "usb001" /m "Brother HL-1450 series" && goto end  

::Drucker Installation für den Raum R_1544
if "%IP%"=="73" rundll32 printui.dll,PrintUIEntry /if /Z /b "Drucker_R1544" /f %windir%\druckertreiber\brother\1450\OEMHL01A.INF /r "usb001" /m "Brother HL-1450 series" && goto end  

::Drucker Installation für den Raum R_1550
if "%IP%"=="82" rundll32 printui.dll,PrintUIEntry /if /Z /b "Drucker_R1550" /f %windir%\druckertreiber\oki\B4350\B43503e.inf /r "usb002" /m "OKI B4350(PCL)" && goto end  

::Beendung der Schleife mit einem Log für den jeweiligen Client
echo An diesem Computer ist kein Drucker angeschlossen/Oder ein anderer Fehler> log_%COMPUTERNAME%.txt
:end

Gruß
Mitglied: 72417
72417 27.09.2010 um 09:31:31 Uhr
Goto Top
moin,
Danke für die Hilfe, habe am WE noch a bissl rumgespielt, nun klappts. Und zwar war die Else nicht Schuld, sondern das Model des Brother 7030 das in der .inf steht.
Es heißt nämlich nicht /m "DCP-7030" sondern /m "DCP 7030 Printer". -.-'
normalerweise verlässt man sich ja auf das, was in ner inf steht oder? ;)

[code]
;=======================================================================
; Brother MFC Setup File
; Copyright (c) 2007 Brother Industries,LTD.
; FileName : brpr7030.inf
; Function : Printer
; OS ; Windows2000/XP/2003 SERVER/VISTA
; Model : DCP-7030
;=======================================================================
[/code]

Weiter unten steht jedoch die richtige bezeichnung:

[MFC_PRT]
"Brother DCP-7030 Printer"

Danke an alle Helferlein, endlich weiter gekommen. face-smile

MfG,
Chris