2010-12-15 98 views
3

Existe-t-il une commande simple pour écrire l'adresse IP dans un fichier?Écriture de l'adresse IP dans le fichier

Je sais écrire dans un fichier, mais y at-il un sysvar ou quelque chose?

+3

Je pense que vous faites une supposition dangereuse quand vous dites * l'adresse IP *. Beaucoup d'ordinateurs ont plus d'une adresse IP car ils ont plusieurs cartes réseau, alors assurez-vous que tout ce que vous faites supporte plusieurs adresses IP. –

+0

au cas où vous auriez besoin de voir votre adresse IP externe (celle assignée à votre modèle/routeur) et non l'adresse IP de votre LAN local, voir ici http://stackoverflow.com/questions/41669330/windows-batch-how-to-get -the-external-ip-into-a-batch-file-variable –

Répondre

3

ipconfig | find "IP Address" > out.txt

Vous avez encore besoin d'extraire l'adresse IP « Adresse IP .............: 0.0. 0,0 "et couper tout espace.

+3

Gardez à l'esprit qu'il peut y avoir plus d'une adresse IP , si vous avez plus d'un adaptateur réseau. – Vicky

3

Simplest je peux penser:

ipconfig > file 
+0

oui, mais savez-vous comment obtenir UNIQUEMENT l'adresse IP? * hm * –

+1

@fuzi: vous pourriez faire quelque chose comme 'ipconfig | trouver "IPv4"> fichier' puis "pour/f" tokens = 2 delims =: "% i dans (fichier) echo% i >> ip.txt' –

2

Est-ce ce que vous cherchez?

@echo on 

for /f "tokens=1-2 delims=:" %%a in ('ipconfig^|find "IP Address"') do set ip=%%b 

set ip=%ip:~1% 

echo %ip% 
0

ajouté un peu pour afficher également la passerelle (routeur) et ping pour voir si votre DNS fonctionne:

@echo off 

:ipaddress 
::Get IP address and save it to ip 
for /f "tokens=1-2 delims=:" %%a in ('ipconfig^|find "IP Address"') do set ip=%%b 
set ip=%ip:~1% 

:gateway 
::Get Gateway address and save it to gateway 
for /f "tokens=1-2 delims=:" %%a in ('ipconfig^|find "Gateway"') do set gateway=%%b 
set gateway=%gateway:~1% 


echo IP address is %ip% 
echo You router address is %gateway% 
pause 

cls 
ping %gateway% -a 
pause 

:end 
+1

Quelle adresse IP? Quelle passerelle? –

2

Pour les machines Windows 7:

ipconfig | findstr /b /c:" IPv4" > output.txt 

Il sont trois caractères d'espaces entre le guillemet ouvrant et IPv4 puisque cette ligne commence techniquement avec des espaces. Je ne suis pas au courant d'un moyen de dépouiller cela avant la commande findstr. Rappelez-vous que, même si c'est techniquement expressions régulières, la ligne de commande Windows ne les analyse pas de la même manière que, disons, C# ou autre. Il y a une liste des séquences/caractères génériques acceptables (marqués pour XP, mais cela a fonctionné pour moi dans un environnement Win7) here. Il m'a fallu un peu d'essais et d'erreurs, mais cela vous donne seulement les lignes pour les adresses IPv4 assignées, et pas les choses "autoconfigurées" qui encombre les résultats des autres recherches.

0

Voici un script vbs qui fera l'affaire. Notez que ceci est pour l'adresse IP externe. Regardez juste ci-dessus pour une adresse IP interne/locale.

Voici le code. il suffit de créer un document texte, collez ce, et renommez-le à something.vbs

Const ForReading = 1 
Const ForAppending = 8 
Dim ipLog, objHTTP, strHTML, varStart 
Dim varStop, strIP, strCurrIP, objFSO 
Dim txtFile, strLine, objShell 

' Log for tracking external IP addresses 
ipLog = "ExternalIP.txt" 

' Get current external IP address from web 
Set objHTTP = CreateObject("MSXML2.XMLHTTP") 
Call objHTTP.Open("GET", "http://checkip.dyndns.org", False) 
objHTTP.Send() 
strHTML = objHTTP.ResponseText 

' Extarct IP from HTML if HTML was recieved 
If strHTML <> "" Then 
    varStart = InStr(1, strHTML, "Current IP Address:", vbTextCompare) + 19 
    If varStart Then varStop = InStr(varStart, strHTML, "</body>", vbTextCompare) 
    If varStart And varStop Then strIP = Mid(strHTML, varStart, varStop - varStart) 
Else 
    strIP = "Unavailable" 
End If 
' Remove preceeding or trailing spaces 
strCurrIP = Trim(strIP) 

' Check for log file and last log entry 
Set objFSO = CreateObject("Scripting.FileSystemObject") 
If Not (objFSO.FileExists(ipLog)) Then 
    ' If log file doesn't exist create it 
    Set txtFile = objFSO.CreateTextFile(ipLog, True) 
    strIP = "" 
Else 
    ' Get last external IP address entry from log file 
    Set txtFile = objFSO.OpenTextFile(ipLog, ForReading) 
    Do Until txtFile.AtEndOfStream 
     strLine = txtFile.ReadLine 
     If Len(strLine) > 0 Then 
      strIP = strLine 
     End If 
    Loop 

End If 
txtFile.Close 

' Extarct last external IP from log file entry 
If strIP <> "" Then 
    varStart = 1 
    varStop = InStr(varStart, strIP, ",", vbTextCompare) - 1 
    If varStop Then strIP = Mid(strIP, varStart, varStop - varStart) 
    ' Remove preceeding or trailing spaces 
    Trim(strIP) 
Else 
    strIP = "Unavailable" 
End If 

' Copy IP to clipboard 
Set objShell = WScript.CreateObject("WScript.Shell") 
objShell.Run "CMD /C ECHO " & strCurrIP & " | CLIP", 2 

' Check if external IP has changed 
If strCurrIP = strIP Then 
' If unchanged display IP 
    MsgBox "External IP: " & strCurrIP & " is unchanged" 
Else 
    ' If changed log to file and display IP 
    Set txtFile = objFSO.OpenTextFile(ipLog, ForAppending) 
    txtFile.Write(strCurrIP & vbTab & vbCrLf) 
    txtFile.Close 
    MsgBox "External IP: " & strCurrIP & vbCrLf & "This IP address has been logged" 
End If 

' Clear variables 
Set ipLog = Nothing 
Set objHTTP = Nothing 
Set strHTML = Nothing 
Set varStart = Nothing 
Set varStop = Nothing 
Set strIP = Nothing 
Set strCurrIP = Nothing 
Set objFSO = Nothing 
Set txtFile = Nothing 
Set strLine = Nothing 
Set objShell = Nothing 

Je ne prends pas de crédit pour ce script, je viens de trouver dans un dossier sur mon ordinateur que je ne l'avais pas touché dans un Longtemps.