Batch: Affichage d'une ligne
Fermé
soca
-
26 nov. 2010 à 12:00
caiman2 Messages postés 1435 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 8 avril 2011 - 26 nov. 2010 à 12:50
caiman2 Messages postés 1435 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 8 avril 2011 - 26 nov. 2010 à 12:50
A voir également:
- Batch: Affichage d'une ligne
- Fichier batch - Guide
- Batch renommer une partie du nom de plusieurs fichiers - Guide
- Modification de plusieurs fichiers avec .bat ✓ - Forum Autoit / batch
- Batch color - Forum Autoit / batch
- Batch net use - Forum Réseau
9 réponses
caiman2
Messages postés
1435
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
8 avril 2011
310
26 nov. 2010 à 12:01
26 nov. 2010 à 12:01
Bonjour,
Sous quel langage votre batch , commande DOS ?
Sous quel langage votre batch , commande DOS ?
caiman2
Messages postés
1435
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
8 avril 2011
310
Modifié par caiman2 le 26/11/2010 à 12:06
Modifié par caiman2 le 26/11/2010 à 12:06
Un fichier doc ce n'est pas facile a analyser , c'est plein de caracteres inutiles.
Il faut plutot un fichier.txt .
Il me faudrait le detail de ce fichier texte , voir quel type de caracteres on rencontres en debut de lignes , si votre premiere ligne est particuliere ...
Dieu a t'il créé le cerveau ou est-ce l'inverse ?
Heureux les simples d'esprit parce que le royaume des cieux leur appartient.
Il faut plutot un fichier.txt .
Il me faudrait le detail de ce fichier texte , voir quel type de caracteres on rencontres en debut de lignes , si votre premiere ligne est particuliere ...
Dieu a t'il créé le cerveau ou est-ce l'inverse ?
Heureux les simples d'esprit parce que le royaume des cieux leur appartient.
Je vais changer pour un fichier .txt, si ça peut aider.
La première ligne est "Envoi d'une requete ping sur xxx.xxx.xxx.xxx avec 32 octets de données". Les accents apparaissent mal sur cette ligne ( peut-être un probleme UNICODE / UTF8 avec Word...)
En fait mon but ultime serait de récupérer l'IP de cette première ligne et d'afficher "Le matériel portant l'IP xxx.xxx.xxx.xxx est en cause" dans la fentre du batch.
Est-ce possible?
La première ligne est "Envoi d'une requete ping sur xxx.xxx.xxx.xxx avec 32 octets de données". Les accents apparaissent mal sur cette ligne ( peut-être un probleme UNICODE / UTF8 avec Word...)
En fait mon but ultime serait de récupérer l'IP de cette première ligne et d'afficher "Le matériel portant l'IP xxx.xxx.xxx.xxx est en cause" dans la fentre du batch.
Est-ce possible?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
caiman2
Messages postés
1435
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
8 avril 2011
310
26 nov. 2010 à 12:14
26 nov. 2010 à 12:14
Attendez , je cherche un programme que j'ai fais en vbscript pour recuperer l'IP local d'un PC et faire une action particuliere en fonction de cette IP.
caiman2
Messages postés
1435
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
8 avril 2011
310
26 nov. 2010 à 12:15
26 nov. 2010 à 12:15
'Script pour connaitre IP machine et remettre non a zéro Proxy
'© 2009 Philippe ROYER
'*************** FONCTIONS ****************************************
Function GetIP()
Dim ws : Set ws = CreateObject("WScript.Shell")
Dim fso : Set fso = CreateObject("Scripting.FileSystemObject")
Dim TmpFile : TmpFile = fso.GetSpecialFolder(2) & "/ip.txt"
Dim ThisLine, IP(10), Mask, NbIP, i, FlagGetIP, IP2
FlagGetIP = "0"
NbIP = 0
'IP(1) = "0"
' MASK = "0"
If ws.Environment("SYSTEM")("OS") = "" Then
ws.run "winipcfg /batch " & TmpFile, 0, True
Else
ws.run "%comspec% /c ipconfig > " & TmpFile, 0, True
End If
With fso.GetFile(TmpFile).OpenAsTextStream
Do While NOT .AtEndOfStream
ThisLine = .ReadLine
If InStr(ThisLine, "Adresse") <> 0 or InStr(ThisLine, "Address") <> 0 Then
' wscript.echo Left( Mid(ThisLine, InStr(ThisLine, ":") + 2),1 )
If Left (Mid (ThisLine, InStr(ThisLine, ":") + 2),1 ) <> 0 Then
NbIP = NbIP + 1
IP(NbIP) = Mid(ThisLine, InStr(ThisLine, ":") + 2)
End If
End If
' wscript.echo Mid(ThisLine, InStr(ThisLine, ":") + 2)
Loop
.Close
End With
'WinXP (NT? 2K?) leaves a carriage return at the end of line
For i = 1 to NbIP
If IP(i) <> "" Then
If Asc(Right(IP(i), 1)) = 13 Then IP(i) = Left(IP(i), Len(IP(i)) - 1)
End If
' wscript.echo "IP trouvé: " & IP(i)
IP2 = split(IP(i),".",4)
If IP2(0)& "." & IP2(1) = "172.20" or IP2(0)& "." & IP2(1) = "10.52" Then
FlagGetIP = "1"
End If
Next
' msgbox ("IP PC = " & IP2(0)& "." & IP2(1) & "." & IP2(2) & "." & IP2(3))
' wscript.echo FlagGetIP
GetIP = FlagGetIP
fso.GetFile(TmpFile).Delete
Set fso = Nothing
Set ws = Nothing
End Function
Function GetIPAddress
' This function retrieves the IP Address from the registry
' It gets it from the CurrentControlSet, so even when using DHCP
' it returns the correct IP Address
' Declare variables
Dim key
Dim cTempIPAddress
Dim cIPAddress
Dim cIPAddressKey
Set oSh = CreateObject("WScript.Shell")
cInterfacesKey="HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters\Interfaces\"
cNICSearch="HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\13\ServiceName"
' First check which network card to use
cNicServiceName=oSh.RegRead(cNICSearch)
' Now read the IP Address from that card
cIPAddressKey=cInterfaceskey + cNicServiceName+"\DhcpIPAddress"
cTempIPAddress=oSh.RegRead (cIPAddresskey)
' Split the items in the var tempIPAddress to the octets in array IPAddress
' MsgBox (cTempIPAddress)
cIPAddress=split (cTempIPAddress,".",4)
' MsgBox (cipaddress)
' the IP addresss is now readable from ipaddress
' for example, to read the first octet, use: FirstOctet=IPAddress(0)
GetIPAddress=cIPAddress
End Function
Function GetIPOctet (nOctet)
' This function retrieves a given octet out of the IP Address
Dim IPAddress
IPAddress=GetIPAddress
GetIPOctet=IPAddress(nOctet-1)
End Function
' *****
' ******************** FIN FONCTIONS ********************************************
on error resume next
Message = "Script pour tester IP du PC" & vbCr
Message = Message & "Si IP # 10.52, 172.20" & vbCr
Message = Message & "alors supprimer Proxy" & vbCr & vbCr
Message = Message & "Continue?"
'X = MsgBox(Message, vbYesNoCancel, "Notice")
'vbOK 1 L'utilisateur a cliqué sur OK.
'vbCancel 2 L'utilisateur a cliqué sur Annuler.
'vbAbort 3 L'utilisateur a cliqué sur Abandon.
'vbRetry 4 L'utilisateur a cliqué sur Réessayer.'
'vbIgnore 5 L'utilisateur a cliqué sur Ignorer.
'vbYes 6 L'utilisateur a cliqué sur Oui.
'vbNo 7 L'utilisateur a cliqué sur Non.
'If X = 6 Then
'******* IP adress venant de fonction GetIP() ****
Dim LANIP
LANIP = GetIP()
'******* Fin IP venant de fonction GetIP() ****
Set WshNetwork = WScript.CreateObject("WScript.Network")
Message = "Computer Name: " & WshNetwork.ComputerName & vbcr
Message = Message & "User Name: " & WshNetwork.UserName & vbcr
Message = Message & "User Domain: " & WshNetwork.UserDomain & vbcr
Set objSysInfo = CreateObject("ADSystemInfo")
' Message = "User name: " & objSysInfo.UserName & vbcr
' Message = Message & "Computer name: " & objSysInfo.ComputerName & vbcr
' Message = Message & "Site name: " & objSysInfo.SiteName & vbcr
' Message = Message & "Domain short name: " & objSysInfo.DomainShortName & vbcr
' Message = Message & "Domain DNS name: " & objSysInfo.DomainDNSName & vbcr
' Message = Message & "Forest DNS name: " & objSysInfo.ForestDNSName & vbcr
' Message = Message & "Schema role owner: " & objSysInfo.SchemaRoleOwner & vbcr
' Message = Message & "Domain is in native mode: " & objSysInfo.IsNativeMode & vbcr
' Wscript.echo Message
' strPDCNamebrut = split (objSysInfo.SchemaRoleOwner,",",8)
' strPDCName = split (strPDCNameBrut(1),"=",2)
' Message = Message & vbcr & "PDC Name: " & strPDCName(1) & vbcr & vbcr
Set WSHShell = WScript.CreateObject("WScript.Shell")
p1 = "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\"
' Wscript.Echo "Etat ProxyEnable avant: " & WSHShell.RegRead (p1 & "ProxyEnable")
If LANIP = "1" Then
WSHShell.Regwrite p1 & "ProxyEnable", 1 , "REG_DWORD"
WSHShell.Regwrite p1 & "ProxyServer", "172.20.1.30:80" , "REG_SZ"
WSHShell.Regwrite p1 & "ProxyOverride", "<local>" , "REG_SZ"
' MsgBox("Mise à jour Proxy ? ",vbyesno,"Mise à jour")
' If Z = 6 Then
' MsgBox("Vous avez cliqué Oui , mise à jour effective !!!")
' End If
Else
WSHShell.Regwrite p1 & "ProxyEnable", 0 , "REG_DWORD"
WSHShell.RegDelete p1 & "ProxyServer"
WSHShell.RegDelete p1 & "ProxyOverride"
End If
'© 2009 Philippe ROYER
'*************** FONCTIONS ****************************************
Function GetIP()
Dim ws : Set ws = CreateObject("WScript.Shell")
Dim fso : Set fso = CreateObject("Scripting.FileSystemObject")
Dim TmpFile : TmpFile = fso.GetSpecialFolder(2) & "/ip.txt"
Dim ThisLine, IP(10), Mask, NbIP, i, FlagGetIP, IP2
FlagGetIP = "0"
NbIP = 0
'IP(1) = "0"
' MASK = "0"
If ws.Environment("SYSTEM")("OS") = "" Then
ws.run "winipcfg /batch " & TmpFile, 0, True
Else
ws.run "%comspec% /c ipconfig > " & TmpFile, 0, True
End If
With fso.GetFile(TmpFile).OpenAsTextStream
Do While NOT .AtEndOfStream
ThisLine = .ReadLine
If InStr(ThisLine, "Adresse") <> 0 or InStr(ThisLine, "Address") <> 0 Then
' wscript.echo Left( Mid(ThisLine, InStr(ThisLine, ":") + 2),1 )
If Left (Mid (ThisLine, InStr(ThisLine, ":") + 2),1 ) <> 0 Then
NbIP = NbIP + 1
IP(NbIP) = Mid(ThisLine, InStr(ThisLine, ":") + 2)
End If
End If
' wscript.echo Mid(ThisLine, InStr(ThisLine, ":") + 2)
Loop
.Close
End With
'WinXP (NT? 2K?) leaves a carriage return at the end of line
For i = 1 to NbIP
If IP(i) <> "" Then
If Asc(Right(IP(i), 1)) = 13 Then IP(i) = Left(IP(i), Len(IP(i)) - 1)
End If
' wscript.echo "IP trouvé: " & IP(i)
IP2 = split(IP(i),".",4)
If IP2(0)& "." & IP2(1) = "172.20" or IP2(0)& "." & IP2(1) = "10.52" Then
FlagGetIP = "1"
End If
Next
' msgbox ("IP PC = " & IP2(0)& "." & IP2(1) & "." & IP2(2) & "." & IP2(3))
' wscript.echo FlagGetIP
GetIP = FlagGetIP
fso.GetFile(TmpFile).Delete
Set fso = Nothing
Set ws = Nothing
End Function
Function GetIPAddress
' This function retrieves the IP Address from the registry
' It gets it from the CurrentControlSet, so even when using DHCP
' it returns the correct IP Address
' Declare variables
Dim key
Dim cTempIPAddress
Dim cIPAddress
Dim cIPAddressKey
Set oSh = CreateObject("WScript.Shell")
cInterfacesKey="HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters\Interfaces\"
cNICSearch="HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\13\ServiceName"
' First check which network card to use
cNicServiceName=oSh.RegRead(cNICSearch)
' Now read the IP Address from that card
cIPAddressKey=cInterfaceskey + cNicServiceName+"\DhcpIPAddress"
cTempIPAddress=oSh.RegRead (cIPAddresskey)
' Split the items in the var tempIPAddress to the octets in array IPAddress
' MsgBox (cTempIPAddress)
cIPAddress=split (cTempIPAddress,".",4)
' MsgBox (cipaddress)
' the IP addresss is now readable from ipaddress
' for example, to read the first octet, use: FirstOctet=IPAddress(0)
GetIPAddress=cIPAddress
End Function
Function GetIPOctet (nOctet)
' This function retrieves a given octet out of the IP Address
Dim IPAddress
IPAddress=GetIPAddress
GetIPOctet=IPAddress(nOctet-1)
End Function
' *****
' ******************** FIN FONCTIONS ********************************************
on error resume next
Message = "Script pour tester IP du PC" & vbCr
Message = Message & "Si IP # 10.52, 172.20" & vbCr
Message = Message & "alors supprimer Proxy" & vbCr & vbCr
Message = Message & "Continue?"
'X = MsgBox(Message, vbYesNoCancel, "Notice")
'vbOK 1 L'utilisateur a cliqué sur OK.
'vbCancel 2 L'utilisateur a cliqué sur Annuler.
'vbAbort 3 L'utilisateur a cliqué sur Abandon.
'vbRetry 4 L'utilisateur a cliqué sur Réessayer.'
'vbIgnore 5 L'utilisateur a cliqué sur Ignorer.
'vbYes 6 L'utilisateur a cliqué sur Oui.
'vbNo 7 L'utilisateur a cliqué sur Non.
'If X = 6 Then
'******* IP adress venant de fonction GetIP() ****
Dim LANIP
LANIP = GetIP()
'******* Fin IP venant de fonction GetIP() ****
Set WshNetwork = WScript.CreateObject("WScript.Network")
Message = "Computer Name: " & WshNetwork.ComputerName & vbcr
Message = Message & "User Name: " & WshNetwork.UserName & vbcr
Message = Message & "User Domain: " & WshNetwork.UserDomain & vbcr
Set objSysInfo = CreateObject("ADSystemInfo")
' Message = "User name: " & objSysInfo.UserName & vbcr
' Message = Message & "Computer name: " & objSysInfo.ComputerName & vbcr
' Message = Message & "Site name: " & objSysInfo.SiteName & vbcr
' Message = Message & "Domain short name: " & objSysInfo.DomainShortName & vbcr
' Message = Message & "Domain DNS name: " & objSysInfo.DomainDNSName & vbcr
' Message = Message & "Forest DNS name: " & objSysInfo.ForestDNSName & vbcr
' Message = Message & "Schema role owner: " & objSysInfo.SchemaRoleOwner & vbcr
' Message = Message & "Domain is in native mode: " & objSysInfo.IsNativeMode & vbcr
' Wscript.echo Message
' strPDCNamebrut = split (objSysInfo.SchemaRoleOwner,",",8)
' strPDCName = split (strPDCNameBrut(1),"=",2)
' Message = Message & vbcr & "PDC Name: " & strPDCName(1) & vbcr & vbcr
Set WSHShell = WScript.CreateObject("WScript.Shell")
p1 = "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\"
' Wscript.Echo "Etat ProxyEnable avant: " & WSHShell.RegRead (p1 & "ProxyEnable")
If LANIP = "1" Then
WSHShell.Regwrite p1 & "ProxyEnable", 1 , "REG_DWORD"
WSHShell.Regwrite p1 & "ProxyServer", "172.20.1.30:80" , "REG_SZ"
WSHShell.Regwrite p1 & "ProxyOverride", "<local>" , "REG_SZ"
' MsgBox("Mise à jour Proxy ? ",vbyesno,"Mise à jour")
' If Z = 6 Then
' MsgBox("Vous avez cliqué Oui , mise à jour effective !!!")
' End If
Else
WSHShell.Regwrite p1 & "ProxyEnable", 0 , "REG_DWORD"
WSHShell.RegDelete p1 & "ProxyServer"
WSHShell.RegDelete p1 & "ProxyOverride"
End If
caiman2
Messages postés
1435
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
8 avril 2011
310
26 nov. 2010 à 12:17
26 nov. 2010 à 12:17
Si je me souviens bien j'avais essayé de le concevoir en commande DOS , et j'avais fini par laisser tomber trop pauvre comme langage et pourtant c'etait une de mes specialités.
Merci pour vos réponses.
Malheureusement, les commandes dos sont mon seul espoir. En effet, le parc est infogéré et extrêmement sécurisé. Je ne peux rien installé sur les postes.
Au cas où, un peu plus de détails:
Les @IP pingées (qui devront être affichées) commencent toutes par le même nombre.
Malheureusement, les commandes dos sont mon seul espoir. En effet, le parc est infogéré et extrêmement sécurisé. Je ne peux rien installé sur les postes.
Au cas où, un peu plus de détails:
Les @IP pingées (qui devront être affichées) commencent toutes par le même nombre.
caiman2
Messages postés
1435
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
8 avril 2011
310
26 nov. 2010 à 12:25
26 nov. 2010 à 12:25
Ok , je regarde si je peux trouver la solution miracle.
caiman2
Messages postés
1435
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
8 avril 2011
310
Modifié par caiman2 le 26/11/2010 à 12:44
Modifié par caiman2 le 26/11/2010 à 12:44
Ca peut ressembler a cela:
for /F "skip= 7 tokens=2,3,4 delims=." %i IN (fichier.txt) do echo 172.%i %j %k
172 correspond au premier nombre IP
Skip pour le nombre de ligne a ignorer en debut de fichier si votre fichier.txt est fait de plusieurs reponses ping.
for /F "skip= 7 tokens=2,3,4 delims=." %i IN (fichier.txt) do echo 172.%i %j %k
172 correspond au premier nombre IP
Skip pour le nombre de ligne a ignorer en debut de fichier si votre fichier.txt est fait de plusieurs reponses ping.
caiman2
Messages postés
1435
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
8 avril 2011
310
26 nov. 2010 à 12:50
26 nov. 2010 à 12:50
au fait pourquoi un programme VBS vous gêne, il s'execute comme un bat sur n'importe quel PC sur xp ?
Il n'y a rien à installer sur ces PC
Il n'y a rien à installer sur ces PC