BATCH-Script zum herausfinden der IP
Fehlermeldung in einem Script zum herausfinden der IP Adresse
Guten Tag liebe Administrator.de Benutzer,
Ich habe ein Script zum herausfinden der IP. Leider kriege ich immer eine Fehlermeldung wenn ich es starte. Ich weiß leider auch nicht wo das Problem liegt. Hier das Script.
Sieht jemand das Problem ?
Vielen Dank im Vorraus !
Guten Tag liebe Administrator.de Benutzer,
Ich habe ein Script zum herausfinden der IP. Leider kriege ich immer eine Fehlermeldung wenn ich es starte. Ich weiß leider auch nicht wo das Problem liegt. Hier das Script.
@echo off
VER |find /i "Windows 95" >NUL
IF NOT ERRORLEVEL 1 GOTO 9598ME
VER |find /i "Windows 98" >NUL
IF NOT ERRORLEVEL 1 GOTO 9598ME
VER |find /i {{comment_strings:23015376162}} >NUL
IF NOT ERRORLEVEL 1 GOTO 9598ME
VER | find "XP" > nul
IF %errorlevel% EQU 0 GOTO XP
VER | find "2000" > nul
IF %errorlevel% EQU 0 GOTO 2000
VER | find "NT" > nul
IF %errorlevel% EQU 0 GOTO NT
VER | find {{comment_strings:11673815007}} > nul
IF %errorlevel% EQU 0 GOTO Vista
VER | find "Microsoft Windows [Version 5" > nul
IF %errorlevel% EQU 0 GOTO 2003
goto unknown
:unknown
echo OS: Unknown >> temp.txt
goto 2
{{comment_single_line_double_colon:1}}
echo OS: Windows 95 98 ME >> temp.txt
goto 1
{{comment_single_line_double_colon:2}}
echo OS: Windows NT >> temp.txt
goto 1
:2003
echo OS: Windows Server 2003 >> temp.txt
goto 1
:2000
echo OS: Windows 2000 >> temp.txt
goto 1
:XP
echo OS: Windows XP >> temp.txt
goto 1
:Vista
echo OS: Vista or Windows 7 >> temp.txt
goto 2
:1
echo Function MyIP_XMLHTTP( ) >wan.vbs
echo Dim objRequest, strURL >>wan.vbs
echo MyIP_XMLHTTP = "0.0.0.0" >>wan.vbs
echo strURL = "http://www.whatismyip.com/automation/n09230945.asp" >>wan.vbs
echo Set objRequest = CreateObject( "Microsoft.XMLHTTP" ) >>wan.vbs
echo objRequest.open "GET", strURL, False >>wan.vbs
echo objRequest.send vbNull >>wan.vbs
echo If objRequest.status = 200 Then MyIP_XMLHTTP = objRequest.responseText >>wan.vbs
echo Set objRequest = Nothing >>wan.vbs
echo End Function >>wan.vbs
echo ret = MyIP_XMLHTTP( ) >>wan.vbs
echo Set FSys = CreateObject("Scripting.FileSystemObject") >>wan.vbs
echo Set MonFic = FSys.CreateTextFile("00001.tmp") >>wan.vbs
echo With MonFic >>wan.vbs
echo .writeLine ret >>wan.vbs
echo End With >>wan.vbs
wan.vbs
if exist 00001.tmp goto xpexist
goto xpnotexist
:xpexist
for /F "tokens=* delims=" %%a in (00001.tmp) do set wanIP=%%a
if xpexist 00001.tmp goto xpexist1
goto xpnotexist1
:xpexist1
del /F /Q 00001.tmp >NUL
:xpnotexist
echo Internet IP: %wanIP% >> temp.txt
exit
:2
echo Function MyIP_XMLHTTP( ) >wan.vbs
echo Dim objRequest, strURL >>wan.vbs
echo MyIP_XMLHTTP = "0.0.0.0" >>wan.vbs
echo strURL = {{comment_strings:23144179821}} >>wan.vbs
echo Set objRequest = CreateObject( {{comment_strings:22472924380}} ) >>wan.vbs
echo objRequest.open "GET", strURL, False >>wan.vbs
echo objRequest.send vbNull >>wan.vbs
echo If objRequest.status = 200 Then MyIP_XMLHTTP = objRequest.responseText >>wan.vbs
echo Set objRequest = Nothing >>wan.vbs
echo End Function >>wan.vbs
echo ret = MyIP_XMLHTTP( ) >>wan.vbs
echo Set FSys = CreateObject({{comment_strings:1361749640}}) >>wan.vbs
echo Set MonFic = FSys.CreateTextFile({{comment_strings:12694595507}}) >>wan.vbs
echo With MonFic >>wan.vbs
echo .writeLine ret >>wan.vbs
echo End With >>wan.vbs
wan.vbs
if exist 00001.tmp goto vistaexist
goto vistanotexist
:vistaexist
for /F "tokens=* delims=" %%a in (00001.tmp) do set wanIP=%%a
if exist 00001.tmp goto vistaexist1
goto vistanotexist1
:vistaexist1
del /F /Q 00001.tmp >NUL
:vistanotexist
ipconfig |find {{comment_strings:12157882805}} >> 00002.tmp
for /f "tokens=2 delims=:" %%a in (00002.tmp) do set lanIP=%%a
del /F /Q 00002.tmp >NUL
for /F "tokens=* delims=" %%i in ({{comment_strings:13514676139}}) do set lang=%%i
set lang=%lang:~68,5%
echo Local IP:%lanIP% >> temp.txt
echo Internet IP: %wanIP% >> temp.txt
echo Localisation: %lang% >> temp.txt
exit
Sieht jemand das Problem ?
Vielen Dank im Vorraus !
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 132475
Url: https://administrator.de/forum/batch-script-zum-herausfinden-der-ip-132475.html
Ausgedruckt am: 09.04.2025 um 01:04 Uhr
7 Kommentare
Neuester Kommentar
Hallo Pinkywesen,
zumindest 3 Dinge, die mir beim Überfliegen des Codes aufgefallen sind:
1. es gibt nur "IF EXIST ....", um das Vorhandensein von Dateien zu prüfen. Sowas wie "if xpexist..." oder "if vistaexist..." kann nicht funktionieren. (Zeilen 62 u. 103)
2. das VBScript mit dem START Befehl aufzurufen würde ich sein lasssen, weil dein Batch dann nicht bis zur Abarbeitung des Scripts wartet, sondern weiterrennt. In deinem Fall: entferne das start vor wan.vbs einfach. (Zeilen 57 u. 98)
3. "goto next" geht ins Leere (wobei ich denke, dass du nicht den kompletten Batch gepostet hast)
<edit>
neben ein paar anderen kleinen Unzulänglichkeiten wie:
- die Echoumleitung bei der ersten Zeile besser mit > statt mit >>
- warum versuchst du das Betriebssystem herauszufinden, wenn du in dessen Abhängigkeit zweimal das gleiche VBScript schreibst
- die *.tmp Datei könntest du dir wahrscheinlich sparen, wenn du das ergebnis der VBS Funktion mit WScript.Echo ausgeben lässt und das Script in einer FOR Schleife mit cscript //nologo wan.vbs startest
usw.
Aber vielleicht geht das für den Anfang zu weit.
</edit>
Grüße
rubberman
zumindest 3 Dinge, die mir beim Überfliegen des Codes aufgefallen sind:
1. es gibt nur "IF EXIST ....", um das Vorhandensein von Dateien zu prüfen. Sowas wie "if xpexist..." oder "if vistaexist..." kann nicht funktionieren. (Zeilen 62 u. 103)
2. das VBScript mit dem START Befehl aufzurufen würde ich sein lasssen, weil dein Batch dann nicht bis zur Abarbeitung des Scripts wartet, sondern weiterrennt. In deinem Fall: entferne das start vor wan.vbs einfach. (Zeilen 57 u. 98)
3. "goto next" geht ins Leere (wobei ich denke, dass du nicht den kompletten Batch gepostet hast)
<edit>
neben ein paar anderen kleinen Unzulänglichkeiten wie:
- die Echoumleitung bei der ersten Zeile besser mit > statt mit >>
- warum versuchst du das Betriebssystem herauszufinden, wenn du in dessen Abhängigkeit zweimal das gleiche VBScript schreibst
- die *.tmp Datei könntest du dir wahrscheinlich sparen, wenn du das ergebnis der VBS Funktion mit WScript.Echo ausgeben lässt und das Script in einer FOR Schleife mit cscript //nologo wan.vbs startest
usw.
Aber vielleicht geht das für den Anfang zu weit.
</edit>
Grüße
rubberman
Hallo Pinkywesen,
zu 2.) Auf keinen Fall!! Das VBScript erzeugt ja erst die *.tmp Datei, die du im weiteren Verlauf benötigst! Muss also abgelaufen sein, bevor es im Batch weiter geht!
Dein Fehler kommt zustande, weil du bei mehrmaligem Aufruf immer wieder an die vorhandenen Dateien hinzufügst. Ersetze mindestens beim Schreiben des VBScripts die erste Zeile so:
Grüße
rubberman
zu 2.) Auf keinen Fall!! Das VBScript erzeugt ja erst die *.tmp Datei, die du im weiteren Verlauf benötigst! Muss also abgelaufen sein, bevor es im Batch weiter geht!
Dein Fehler kommt zustande, weil du bei mehrmaligem Aufruf immer wieder an die vorhandenen Dateien hinzufügst. Ersetze mindestens beim Schreiben des VBScripts die erste Zeile so:
echo Function MyIP_XMLHTTP( ) >wan.vbs
Grüße
rubberman
Hallo Pinkywesen,
falls du die Windowsversion nicht noch für irgendetwas anderes benötigst, kannst du dir die Geschichte eigentlich sparen.
Hier mal die Kurzfassung von dem, was ich meinte:
Das VBScript habe ich noch etwas verändert. Ua. erfolgt die Ausgabe jetzt über "WScript.Echo".
In Zeile 13 erfolgt der Aufruf des Scripts und die Zuweisung der Variablen.
Das > inZeile " >temp.txt echo Internet IP: %IPAdr%" musst du noch zu >> ändern, wenn du vorher die Windowsversion in die temp.txt schreibst.
Grüße
rubberman
falls du die Windowsversion nicht noch für irgendetwas anderes benötigst, kannst du dir die Geschichte eigentlich sparen.
Hier mal die Kurzfassung von dem, was ich meinte:
@echo off &setlocal
>"%temp%\GetIPAdr.vbs" echo Function MyIP()
>>"%temp%\GetIPAdr.vbs" echo Dim objRequest : Set objRequest = CreateObject("Microsoft.XMLHTTP")
>>"%temp%\GetIPAdr.vbs" echo objRequest.open "GET", "http://www.whatismyip.com/automation/n09230945.asp", False
>>"%temp%\GetIPAdr.vbs" echo objRequest.send vbNull
>>"%temp%\GetIPAdr.vbs" echo If objRequest.status = 200 Then MyIP = objRequest.responseText
>>"%temp%\GetIPAdr.vbs" echo Set objRequest = Nothing
>>"%temp%\GetIPAdr.vbs" echo End Function
>>"%temp%\GetIPAdr.vbs" echo On Error Resume Next
>>"%temp%\GetIPAdr.vbs" echo WScript.Echo MyIP()
for /f "delims=" %%i in ('cscript //nologo "%temp%\GetIPAdr.vbs"') do set "IPAdr=%%i"
del "%temp%\GetIPAdr.vbs"
if not defined IPAdr (
echo Die IP Adresse konnte nicht ermittelt werden.
echo Pruefe bitte die Verbindung zum Internet.
pause
goto :eof
) else (
>temp.txt echo Internet IP: %IPAdr%
)
pause
In Zeile 13 erfolgt der Aufruf des Scripts und die Zuweisung der Variablen.
Das > inZeile " >temp.txt echo Internet IP: %IPAdr%" musst du noch zu >> ändern, wenn du vorher die Windowsversion in die temp.txt schreibst.
Grüße
rubberman
Hallo Pinkywesen
mal sehen, was geht.
Denke, das sollte so ziemlich alles abdecken, was du wolltest.
Grüße
rubberman
<edit>
Da IPCONFIG die IP-Adresse auch nur dann ausspuckt, wenn der Rechner im Net registriert ist, entsprechende Abfrage hinzu.
</edit>
mal sehen, was geht.
@echo off &setlocal
::::::::::::::: OS
>"%temp%\GetOsInfo.vbs" echo Set colOperatingSystems = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2").ExecQuery("Select * from Win32_OperatingSystem")
>>"%temp%\GetOsInfo.vbs" echo For Each objOperatingSystem in colOperatingSystems
>>"%temp%\GetOsInfo.vbs" echo Wscript.Echo objOperatingSystem.Caption
>>"%temp%\GetOsInfo.vbs" echo Next
for /f "delims=" %%a in ('cscript //nologo "%temp%\GetOsInfo.vbs"') do set "OS=%%a"
del "%temp%\GetOsInfo.vbs"
>temp.txt echo OS: %OS%
::::::::::::::: Local IP
for /f "delims=: tokens=2" %%i in ('ipconfig^|findstr /i /c:"ip-adr"') do set "loclIPAdr=%%i"
if not defined loclIPAdr(
>>temp.txt echo Local IP: Failure !
) else (
>>temp.txt echo Local IP: %loclIPAdr:~1%
)
::::::::::::::: Net IP
>"%temp%\GetIPAdr.vbs" echo Function MyIP()
>>"%temp%\GetIPAdr.vbs" echo Dim objRequest : Set objRequest = CreateObject("Microsoft.XMLHTTP")
>>"%temp%\GetIPAdr.vbs" echo objRequest.open "GET", "http://www.whatismyip.com/automation/n09230945.asp", False
>>"%temp%\GetIPAdr.vbs" echo objRequest.send vbNull
>>"%temp%\GetIPAdr.vbs" echo If objRequest.status = 200 Then MyIP = objRequest.responseText
>>"%temp%\GetIPAdr.vbs" echo Set objRequest = Nothing
>>"%temp%\GetIPAdr.vbs" echo End Function
>>"%temp%\GetIPAdr.vbs" echo On Error Resume Next
>>"%temp%\GetIPAdr.vbs" echo WScript.Echo MyIP()
for /f "delims=" %%i in ('cscript //nologo "%temp%\GetIPAdr.vbs"') do set "IPAdr=%%i"
del "%temp%\GetIPAdr.vbs"
if not defined IPAdr (
>>temp.txt echo Internet IP: Failure !
) else (
>>temp.txt echo Internet IP: %IPAdr%
)
::::::::::::::: Country
for /f "tokens=3 delims= " %%i in ('reg query "HKCU\Control Panel\International" /v "sCountry"') do set "country=%%i"
>>temp.txt echo Localisation: %country%
pause
Denke, das sollte so ziemlich alles abdecken, was du wolltest.
Grüße
rubberman
<edit>
Da IPCONFIG die IP-Adresse auch nur dann ausspuckt, wenn der Rechner im Net registriert ist, entsprechende Abfrage hinzu.
</edit>