Supression port COM

Supression port COM - Logiciels - Windows & Software

Marsh Posté le 27-01-2016 à 14:34:41    

Bonjour à tous,
 
Voilà j'ai pas mal galérer à trouver alors je poste pour peut être pouvoir en aider d'autres.
 
Problème initial :
La où je travail, des collègues font des tests sur les carte Arduino.
A chaque fois que l'on connecte un Arduino ou autre périphérique pouvant réaliser la même opération (j'ai vu des problème avec des périphériques bluetooth par exemple) windows lui attribut un port COM.
 
Cependant plus on branche de périphériques différent plus le numéro du port attribué est grand exemple on peut ce retrouver avec quelque chose du style: Arduino UNO R3 COM24
 
Hors certain logiciel ne reconnaisse que jusqu'au port COM9
 
Si il ne s'agissait de gérer qu'un seul ordinateur la solution est simple : http://www.thewindowsclub.com/show [...] es-windows
 
Dans mon cas il s'agit de régler se problème régulièrement sur 15 postes.
 
Il a donc fallut mettre en place un script.
 
Solution:
En se promenant un peu sur google on parle d'un outils devcon.exe utilisé pour manager les périphériques.
 
j'ai donc télécharger le fameux devcon.exe
 
Puis dans le même dossier que ce dernier j'ai créer un petit script .bat que voici:
 

Code :
  1. @ECHO OFF
  2. DEVCON Find * | FINDSTR /R "COM[0-9]"> "DevicesExist.txt"
  3. FOR /F "tokens=1 delims=: " %%A IN ('DEVCON FindAll * ^| FINDSTR /R "COM[0-9]"') DO (
  4.         TYPE "DevicesExist.txt" | FIND "%%~A" >NUL
  5.        IF ERRORLEVEL 1 %Debug% DEVCON remove "@%%~A"
  6. )


 
permettant donc de supprimer tout les périphériques attribués a des port COMx et qui ne sont pas actuellement présent sur l'ordinateur (afin d'éviter de supprimer ce qui est encore utile :)
 
J'ai aussi fait la version .vbs (attention ça pique les yeux, pas dutout aboutie en therme d'optimisation mais ça fonctionne ):
 

Code :
  1. strSourceDevcon = "devcon.exe"
  2. device = 0
  3. count = 1
  4. Set objFSO = CreateObject("Scripting.FileSystemObject" )
  5. Set WshShell = CreateObject("WScript.Shell" )
  6. Const ForReading = 1, ForWriting = 2
  7. Const TwoSeconds = 2000
  8. Set pcd = objFSO.OpenTextFile("presentcomdevice.txt", ForWriting,true)
  9. Set acd = objFSO.OpenTextFile("allcomdevice.txt", ForWriting,true)
  10. Set del = objFSO.OpenTextFile("deldevice.txt", ForWriting,true)
  11. Set loggs = objFSO.OpenTextFile("loggs.txt", ForWriting,true)
  12. strTempFile1 = objFSO.GetTempName
  13. aux = "cmd.exe /c devcon find * >" & strTempFile1
  14. WshShell.Run aux, 0
  15. Wscript.Sleep TwoSeconds
  16. Set objTextFile = objFSO.OpenTextFile(strTempFile1, ForReading)
  17. ' chercher les peripherique COM presents
  18. Do Until objTextFile.AtEndOfStream
  19.     strNextLine = objTextFile.Readline
  20. set objRE = New RegExp
  21. With objRE
  22.  .Pattern    = "COM[0-9]"
  23.  .IgnoreCase = False
  24.  .Global     = False
  25. End With
  26. If objRE.Test( strNextLine ) Then
  27.  strComDevice = strNextline
  28.  device = device + 1
  29.  pcd.writeline(strComDevice)
  30.  count = count + 1
  31. End If
  32. Set objRE = Nothing
  33. Loop
  34. objTextFile.Close
  35. ' affichage des stats
  36. wscript.echo (device & " PRESENT COM device(s) find" )
  37. Wscript.Sleep TwoSeconds
  38. device = 0
  39. count = 1
  40. strTempFile2 = objFSO.GetTempName
  41. aux = "cmd.exe /c devcon findall * >" & strTempFile2
  42. WshShell.Run aux, 0
  43. Wscript.Sleep TwoSeconds
  44. Set objTextFile = objFSO.OpenTextFile(strTempFile2, ForReading)
  45. ' chercher tout les peripheriques COM
  46. Do Until objTextFile.AtEndOfStream
  47.     strNextLine = objTextFile.Readline
  48. set objRE = New RegExp
  49. With objRE
  50.  .Pattern    = "COM[0-9]"
  51.  .IgnoreCase = False
  52.  .Global     = False
  53. End With
  54. If objRE.Test( strNextLine ) Then
  55.  strComDevice = strNextline
  56.  device = device + 1
  57.  acd.writeline(strComDevice)
  58.  count = count + 1
  59. End If
  60. Set objRE = Nothing
  61. Loop
  62. objTextFile.Close
  63. wscript.echo (device & " COM device(s) find in ALL" )
  64. Wscript.Sleep TwoSeconds
  65. device = 0
  66. pass = 0
  67. Set objTextFile1 = objFSO.OpenTextFile("allcomdevice.txt", ForReading)
  68. ' supprimer les peripherique COM caches
  69. Do Until objTextFile1.AtEndOfStream
  70. strLine1 = objTextFile1.Readline
  71. Set objTextFile2 = objFSO.OpenTextFile("presentcomdevice.txt", ForReading)
  72. Do Until pass = 1 or objTextFile2.AtEndOfStream
  73.  strLine2 = objTextFile2.Readline
  74.  TestComp = StrComp(strLine1, strLine2, Text)
  75.  IF TestComp = 0 Then
  76.   pass = 1
  77.   loggs.writeline(strLine1 & "pass" )
  78.  End If
  79. Loop
  80. objTextFile2.Close
  81. IF pass <> 1 Then
  82.  del.writeline (strLine1)
  83.  device = device + 1
  84.  arrAux = split(strLine1, ":" )
  85.         remove = arrAux(0)
  86.  Set arrAux = Nothing
  87.  aux = "cmd.exe /c devcon remove @" & remove
  88.  wscript.echo ("Removing @" & remove)
  89.  WshShell.Run aux, 0
  90.  Wscript.Sleep TwoSeconds
  91. End If
  92. pass = 0
  93. Loop
  94. objTextFile1.Close
  95. wscript.echo (device & " COM device(s) deleted" )


Message édité par eagleenergy le 28-01-2016 à 08:08:16
Reply

Marsh Posté le 27-01-2016 à 14:34:41   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed