Télévision - box ADSL

Répondre

Date d'inscription : 18-01-2013

Post(s) : 2753

Sujet(s) : 53

Merci(s) : 712

Réponse(s) acceptée(s) : 200

Re : VBS au secours de SFR :Liste des enregistrements (durée - taille - débit)

[ modifié ]

@hachemcress a écrit :
 

Après essai : le copier-coller modifie une ligne en mettant des ? , là où il n-y en a pas. Cela brouille le tableau.

Je n'en comprend pas la cause (les nord-coréens ??)

 

Pour y remédier, il suffit de les enlever une fois le script chargé dans le bloc note : à la ligne qui commence par Ligv =, supprimez les 2 points d'interrogation qui se mettent entre les ________?


J'ai essayé de reproduire cet effet en dehors du forum : impossible. Ce sont bien les Nord-Coréens qui sévissent : ils m'ont déjà fait le coup de modifier une variable qui était les 3 premières lettres du mot "Titre" ? Ca doit être une insulte.

Tiens je vous la remet, pour voir     Tit = "De quoi vous vous mêlez ?"

----------------------------------------------------------------

Ajouté ensuite : Cette fois, ça a passé ...

Highlighted

Date d'inscription : 18-01-2013

Post(s) : 2753

Sujet(s) : 53

Merci(s) : 712

Réponse(s) acceptée(s) : 200

Re : VBS au secours de SFR :Liste des enregistrements (durée - taille - débit)

[ modifié ]

Coucou, me revoilà.

Pour éviter le petit problème nord-coréen, j'ai modifié le listing, et cela devrait passer (je ne le saurai qu'une fois fait)

'---------------------------------------------------------------------------------------

Dim Disk : Disk = "Z" ' à modifier si pas Z
Dim Fs, Sh, Path, Fold, Subfold, Dossier, Da, Chaine, x, y, z
Dim Pathrec, TextFile, I, Ch, Titre, Duree, Debit, Bof
Dim Liste(), K, FListe, DN, Taille, Fich, LigV, LigTirets
Dim TotT, TotD, Rep, Mess, Ordre, Interl
Set Fs = CreateObject("Scripting.FileSystemObject")
If Not Fs.driveExists(Disk) Then
    MsgBox "Disque réseau " & Disk & " non créé"
    WScript.Quit
End If
FListe = Disk & ":\Liste des enregistrements.txt"
If Fs.FileExists(FListe) Then
 Rep = msgbox("Le fichier " & FListe & " sera remplacé par le nouveau" & vbcrlf _
 & "Voulez-vous continuer ?",vbYesNo+vbQuestion,"ECRASEMENT ?")
 If Rep = vbNo Then WScript.Quit
End If
Mess = "Tapez le chiffre correspondant à l'ordre désiré :" & vbCrLf _
& " 1 : Chrono " & vbCrLf & " 2 : par titres" & vbCrLf _
& " Rien : chrono inversé (idem écran télé)"
Ordre = InputBox(Mess," Choix du mode de tri)")
If Ordre <> "1" And Ordre <> "2" Then
 Ordre = "3"
 Mess = "Tapez la taille des blocs entre lignes de tirets" & vbCrLf _
 & "Par exemple : 3 correspond à la commande voir" & vbCrLf _
 & " 5 à la commande Supprimer mes enregistrements" & vbCrLf _
 & " Pas de réponse = pas de tirets"
 Interl = InputBox(Mess,"Interlignes")
 If Interl = "" Then Interl = 500 ' Else Interl = Interl +0
End if 
Mess = "Le traitement peut durer 1 à 2 minutes" & vbCrLf _
& "pendant lesquelles vous ne verrez rien" & vbCrLf _
& "Ne pas l'exécuter à nouveau jusqu'au" & vbCrLf _
& "message de fin"
Bof = msgbox(Mess, vbCritical+vbokcancel,"OK pour démarrer")
If Bof = vbCancel Then WScript.quit
Path = Disk & ":\.system\timeshift\records"
On Error Resume Next
T = Timer
Do
 Err.Clear
 Set Fold = Fs.getfolder(Path)
Loop While Err '  boucle tant que le disque est arrêté
On Error Goto 0 
Set Subfold = Fold.SubFolders
ReDim Liste(Subfold.Count-1,4)
K = 0
For Each Dossier In Subfold
 If UCase(Left(Dossier.Name,3)) = "REC" then
     Pathrec = Path & "\" & Dossier.Name & "\record.xml"
     Set TextFile = Fs.OpenTextFile(Pathrec, 1, False, 0)
     Ch = TextFile.ReadAll
     x = InStr(Ch, "dc:title")
     y = InStr(x+8,Ch,"duration")
     z = InStr(y+8,Ch,"size")
     TextFile.close
     If x Then
      Titre = Mid(Ch, x + 11, 100)
      x = Instr(1, Titre, "<")
      if x then Titre = Left(Titre, x - 1)
      Titre = Left(corr(Titre),43)
     Else
      Titre = ""
     End If
     If y Then
   Duree = Mid(Ch,y + 11, 6)
   y = InStr(1, Duree, "<")
   Duree = Left(Duree, y - 1)
  Else
   Duree = 0
  End If
  If z Then
   Taille = Mid(Ch,z + 7)
   z = InStr(1, Taille, "<")
   Taille = Left(Taille, z-1)
  else 
   Taille = 0
  End if 
     Liste(K,0) = Dossier.Name
     Liste(K,1)= Left(Dossier.DateCreated,16)
     Liste(K,2)= Titre
     Liste(K,3)= Duree
     Liste(K,4)= Taille
     K = K+1
    End If
Next
Call Trier(Liste,K)
TotT=0:TotD=0
Set TextFile = Fs.OpenTextFile(FListe,2,True,0)
LigTirets = ":" & String(112,"-") & ":"
With Textfile   
 .WriteLine(LigTirets)
 .WriteLine(":  Dossier (abrégé)   :    Date    Heure : Durée  :  Taille  : Ko/S :" _
     & " Titre" & Space(38) & ":")
 For I = 0 To K-1
  If (Ordre = "3" And I Mod Interl = 0) Or I = 0 Then .WriteLine(LigTirets)
  DN = Liste(I,0)
  DN = Mid(DN,5,8) & "*" & Right(DN,10)
  Duree = Liste(I,3)
  TotD = TotD + Duree
  Taille = Liste(I,4)
  TotT = TotT + Taille
  Debit = Int(Taille/1024/Duree + 0.5)
  Duree = Int(Duree/60+0.5)
  Duree = Right("   " & Duree,4)
  Taille = Int(Taille/1024/1024/10.24 + 0.5)/100
  Taille = Right("    " & formatnumber(Taille,2),5)
  Debit = Right("   " & Debit,4)
  Titre = Liste(I,2)
  DN = ": " & DN & " : " & Liste(I,1) & " :" & duree  & " mn : " & taille & " Go : " _
   & Debit & " : " & Titre & Space(43 - Len(Titre)) & ":"
  .WriteLine(DN)
 Next ' I
 .WriteLine(LigTirets)
 .WriteBlankLines(1) 
 .WriteLine(" Les tailles sont en GigaOctets réels (1 GO = 1,073 milliards d'octets)")
 .WriteLine(" Ko/S = Kilo-Octets par seconde (1 KO = 1.024 octets)")
 TotT = Int(TotT/1024/1024/10.24)/100
 TotD = Int(TotD/3600+0.5) & " Heures"
 .WriteLine(" Taille Totale : " & TotT & " GigaOctets - Durée Totale : " & TotD)
 If Interl = 3 Or Interl = 5 Then .WriteLine(" Pour supprimer des enregistrements, commencez par la fin")
End with 
Bof = msgbox ("La liste est dans le fichier " & FListe,, "Terminé")
WScript.Quit
''''''  Correction du titre '''''''
Function corr(Titre)
 Titre = Rempl(Titre,"é","é")
 Titre = Rempl(Titre,"&apos;","'")
 Titre = Rempl(Titre,"ê","ê")
 Titre = Rempl(Titre,"è","è")
 Titre = Rempl(Titre,"ô","ô")
 Titre = Rempl(Titre,"ç","ç")
 Titre = Rempl(Titre,"Ã","à")
    corr = Titre
End Function
''''''' Remplacement caractères bizarres ''''''''
Function Rempl(Titre,Ch1,Ch2)
      x = 1
      Do
        x = InStr(x, Titre, Ch1)
        If x = 0 Then Exit Do
        Titre = Left(Titre, x - 1) & Ch2 & Mid(Titre, x + Len(Ch1))
      Loop
Rempl = Titre
End function
'''''  Trier la liste (choix du mode)      
Sub Trier(Liste,K)
 Dim Test
 Select Case Ordre
  Case "1" : Call TriDir(Liste,K,0)
  Case "2" : Call TriDir(Liste,K,2)
  Case else : Call TriInverse(Liste,K)
 End Select
End Sub
''''''  Tri à bulles chrono inverse (idem écran télé)
Sub TriInverse(Liste,K)
 Dim Test 
 Do
  Test = False
  For I = 1 To K-1
   If Liste(I,0) > Liste(I-1,0) Then
    Test = True
    For J = 0 To 4
     Bof = Liste(I,J)
     Liste(I,J)=Liste(I-1,J)
     Liste(I-1,J) = Bof
    Next ' J
   End If
  Next ' I
 Loop While Test
End sub 
'''''''  Autres modes de tri selon colonne   
Sub TriDir(Liste,K,Col)
 Dim Test  
 Do
  Test = False
  For I = 1 To K-1
   If Liste(I,Col) < Liste(I-1,Col) Then
    Test = True
    For J = 0 To 4
     Bof = Liste(I,J)
     Liste(I,J)=Liste(I-1,J)
     Liste(I-1,J) = Bof
    Next ' J
   End If
  Next ' I
 Loop While Test
End sub

'----------------------------------------------------------------------------------------------------------  

Test effectué : les nord-coréens n'ont vu que du feu.

Je rappelle à ceux qui débarquent :

Il faut créer un lecteur réseau (voir le début du post)

Pour copier le listing, faire un copier-coller de ce qui est entre les 2 lignes de tirets, coller dans le bloc-notes, et sauver sous un nom finissant par .vbs (ex : Liste décodeur.vbs)

Faire un double-clic sur le fichier pour l'exécuter.   

Date d'inscription : 18-01-2013

Post(s) : 2753

Sujet(s) : 53

Merci(s) : 712

Réponse(s) acceptée(s) : 200

Re : VBS au secours de SFR :Liste des enregistrements (durée - taille - débit)

[ modifié ]

Bonjour,

 

Sur un autre post, en affirmant que le disque s'arrête parfois, j'ai soulevé une discussion. Voici donc un petit script qui compte le nombre de boucles et la durée de lancement. Si le nombre de boucles est 1, le disque était en marche.

'------------------------------ DEBUT -----------------------------------------------------------------------------------

Dim Fs, Disk, DossSFR, T, B
Disk = "Z"
Set Fs = CreateObject("Scripting.FileSystemObject")
If Not Fs.driveExists(Disk) Then
      MsgBox "Disque réseau " & Disk & " non créé"
      WScript.Quit
End If
DossSFR = Disk & ":\.system"
T = Timer
B = 0
DO
     B = B + 1
     Err.Clear
     set Fold = Fs.getfolder(DossSFR)
loop while Err and Timer < T + 10
msgbox "Nombre de boucles :" & B & vbcrlf & "Durée : " & Timer - T

'------------------- FIN ----------------------------------

Pour le moment, je ne l'ai testé qu'une fois, et j'ai eu 1 boucle et 1/10 de secondes

Date d'inscription : 18-01-2013

Post(s) : 2753

Sujet(s) : 53

Merci(s) : 712

Réponse(s) acceptée(s) : 200

Re : VBS au secours de SFR :Liste des enregistrements (durée - taille - débit)

Bonjour,

 

Il manquait une ligne au précédent : il ne pouvait pas donner autre chose qu'une seule boucle

'-----------------------------------------------------------------------------------------------

Dim Fs, Disk, DossSFR, T, B
Disk = "Z"
Set Fs = CreateObject("Scripting.FileSystemObject")
If Not Fs.driveExists(Disk) Then
      MsgBox "Disque réseau " & Disk & " non créé"
      WScript.Quit
End If
DossSFR = Disk & ":\.system"
T = Timer
B = 0
On Error Resume next
DO
     B = B + 1
     Err.Clear
     set Fold = Fs.getfolder(DossSFR)
loop while Err And Timer < T+5
msgbox "Nombre de boucles :" & B & vbcrlf & "Durée : " & Timer - T

'---------------------------------------------------------

Date d'inscription : 18-01-2013

Post(s) : 2753

Sujet(s) : 53

Merci(s) : 712

Réponse(s) acceptée(s) : 200

Re : VBS au secours de SFR :Liste des enregistrements (durée - taille - débit)

[ modifié ]

Bonjour,

 

Ce petit script est suffisamment court pour donner des explications :

Pour les utilisateurs de VBA :

- Il n'est pas obligatoire de déclarer les variables (j'ai oublié de déclarer Fold, ça marche quand même). Si on les déclare, on ne peut pas indiquer leur type, par exemple : "Dim Fs as object" est une erreur

- La seule fonction spécifique est : WScript.quit

- Le script n'est pas dans une sub (mais on peut faire des Sub et des Function)

- La ligne manquante dans le précédent était "On error resume next" (en cas d'erreur, passer outre) ; la boucle ne peut boucler que si l'erreur ne la bloque pas

 

Pour les autres :

Le début vérifie si le disque réseau existe bien : Z est sa lettre habituelle. VBS ne peut pas fonctionner sans cela : il ne peut fonctionner qu'avec une lettre de lecteur (STB01 : connaît pas)

 set Fold = Fs.getfolder(DossSFR) : cherche à ouvrir le dossier .system qui est sur le disque SFR; si le disque est arrêté, le script ne le trouve pas; et génère une erreur. Cependant, cette instruction a pour effet de lancer le disque, et on tourne en boucle jusqu'à ce que le dossier devienne visible. B compte le nombre de boucles. Le timer est un compteur de temps depuis minuit. Cela permet de calculer le temps écoulé.

 

La boucle est la suivante :

DO
     B = B + 1
     Err.Clear
     set Fold = Fs.getfolder(DossSFR)
loop while Err And Timer < T+5

 

A chaque tour, la valeur de B est augmentée de 1 (B = B +1 est mathématiquement absurde, mais le signe = n'a pas ici un sens mathématique : B = B + 1 veut dire : "Donner à B une valeur égale à sa valeur précédente augmentée de 1"

Err.clear efface les erreurs (en particulier celle de la boucle précédente)

loop while Err : tourner en boucle tant qu'il y a une erreur

And Timer < T+5 : sans cela, si le décodeur est coupé, le programme tourne en boucle indéfiniment (en fait jusqu'au plantage); avec il s'arrête au bout de 5 secondes

 

 

Date d'inscription : 18-01-2013

Post(s) : 2753

Sujet(s) : 53

Merci(s) : 712

Réponse(s) acceptée(s) : 200

grand-père BATCH au secours de SFR : connaître l'adresse IP du décodeur

[ modifié ]

Coucou, me revoilà

 

Plutôt que du faire du VBS, faisons du batch (ça rajeunit de 20 ans au moins ....)

Ouvrez le bloc-notes, puis tapez les 3 lignes qui suivent (ou faites un copier-coller, vu que c'est assez long à taper ...)

 

 

ping stb01

ping stb0xx

pause

 

Ce sont des zéros pas la lettre O

sauvez sous le nom IP-Décodeur.bat    (par exemple, pourvu que ça finisse par .bat)

 

faites un double-clic sur le fichier sauvé.

Date d'inscription : 18-01-2013

Post(s) : 2753

Sujet(s) : 53

Merci(s) : 712

Réponse(s) acceptée(s) : 200

Re : grand-père BATCH au secours de SFR : connaître l'adresse IP du décodeur

Bon !

 

Pas plus de succès avec le batch qu'avec le VBS.

 

J'ai oublié de vous dire à quoi ça sert : en lançant ce "programme", on obtient l'adresse IP du décodeur; on peut l'obtenir aussi en consultant la box, mais ici ça n'oblige pas à taper le mot de passe si la box est protégée.

 

Avec l'adresse IP, on peut créer un lecteur réseau, qui s'appelle Z: (en général), et qui sera accessible, même si le STB change de nom, comme cela lui arrive (moins souvent depuis quelque temps)

 

Comment ça marche ? PING est une fonction qui fonctionne sous MSDOS ; pour entrer sous MSDOS, la méthode courante consiste à éxécuter la commande CMD. Sous Windows 8, l'accès à Executer n'est pas évident ; le mieux est de passer par l'aide (Microsoft a honte de tout ce qui rappelle MSDOS ?)

 

En mettant la commande PING dans un fichier BAT, le passage sous DOS est automatique depuis Windows. PING interrroge une adresse pour savoir si elle est accessible (on peut taper par exemple PING forum.sfr.fr). L'adresse IP est fournie en retour (46.19.168.112). En mettant les 2 noms habituels du décodeur, il y en a forcément un qui répond.

 

La commande Pause a pour effet de bloquer jusqu'à ce qu'on frappe une touche, et de laisser le temps de voir l'adresse IP:

 

ping forum.sfr.fr

pause

 

 

Date d'inscription : 18-01-2013

Post(s) : 2753

Sujet(s) : 53

Merci(s) : 712

Réponse(s) acceptée(s) : 200

Créeer un lecteur réseau Z: sans se casser la tête avec ce qu'il y a dans la box

[ modifié ]

Bonjour,

 

Cela fait 8 mois que je cherche comment créer un lecteur réseau sans aller voir dans la box ce qui se passe. Ayant trouvé une solution presque par hasard, je vous la donne :

'-------------------------------------------------------------------------------------------------

Dim Ndecod, Lettre
Ndecod = "NEUFTVSTB_MA_2420" ' vérifier sur "reseau" de la box
Lettre = "Z"  ' rectifier éventuellement si déjà utilisé ailleurs
Dim nsCommand,WshShell, oShell, oExec
Dim Ch,Lig, adres
Dim Fs,Wnet
Set WshShell = WScript.CreateObject("Wscript.Shell")
Set oExec = WshShell.Exec("nslookup -opt " & Ndecod)
Ch = oExec.StdOut.ReadAll
If Len(Ch) < 50 then
 WScript.Echo "Votre décodeur ne s'appelle pas " & Ndecod
 WScript.Quit
End if 
X = InStr(1,Ch,"192.168")
Ch = Mid(Ch,X+11)   '  Routeur
X = InStr(1,Ch,"192.168")
adres = Mid(Ch,x,12)
set oExec = nothing
set WshShell = nothing
Set Fs = WScript.CreateObject("Scripting.FileSystemObject")
If Fs.DriveExists(Lettre & ":") Then
    If Fs.FolderExists(Lettre & ":\.system\timeshift") Then
        MsgBox "Le disque interne est déjà un lecteur réseau : " & Lettre
    Else
        Msgbox "La lettre " & Lettre & " est déjà utilisée, modifiez la ligne 3 du présent fichier"
    End if
Else
    Set Wnet = WScript.CreateObject("Wscript.Network")
    Wnet.MapNetworkDrive Lettre & ":","\\" & adres & "\disque_interne"
    MsgBox "Disque réseau créé ; lettre " & Lettre
End if

'------------------------------------------------------------------------------------------------------

Je rappelle le procédé à utiliser : selectionner tout ce qui qui est entre les 2 lignes de tirets, cliquer droit, faire copier.

Ouvrir le bloc-notes, coller : sauver le fichier sous un nom tel que :   CreLectResIP.vbs

Il suffit de faire un double-clic sur ce fichier pour créer un lecteur Z, invariable (je croyais que STB01 était bien établi, mais hier il s'appelait STB0XX !, d'où l'intéret de se baser plutôt sur l'adresse IP

 

Je ne sais pas si le nom du décodeur est partout NEUFTVSTB_MA_2420, mais si ce n'est pas ça, le programme ne fera pas exploser le décodeur.

 

Ajouté 5 minutes après : Test OK : j'ai fait le copier-coller, essayé sans déconnecter Z, déconnecté Z, et ré_essayé : mon lecteur Z est bien revenu comme espéré. Tests effectués sur un PC sous XP et un autre sous Windows 8.1

Date d'inscription : 18-01-2013

Post(s) : 2753

Sujet(s) : 53

Merci(s) : 712

Réponse(s) acceptée(s) : 200

Re : Liste des appareils connectés au réseau et leurs adresses IP

Bonjour,

 En complément, voici un petit script qui donne la liste des appareils du réseau et leur adresse IP, soit, les PC  et le décodeur. (comme l'onglet réseau de la box, mais sans nécessiter le mot de passe s'il est activé); si le nom du décodeur n'est pas NEUFTVSTB_MA_2420, cela permet de mettre le bon en ligne 2

'-------------------------------------------------------------------------------------------------------

Dim WshShell, oExec, Ch, I
Set WshShell = WScript.CreateObject("Wscript.Shell")
For I = 20 To 99
     Set oExec = WshShell.Exec("nslookup 192.168.1." & I)
      Ch = oExec.StdOut.ReadAll
      If Len(Ch) > 50 Then WScript.Echo Ch
Next

Date d'inscription : 18-01-2013

Post(s) : 2753

Sujet(s) : 53

Merci(s) : 712

Réponse(s) acceptée(s) : 200

Re :Suppression du timeshift (version complète à partir de rien)

[ modifié ]

Bonjour,

 

Ci-joint, une image récapitualtive des opérations à faire pour transformer les e-mails en fichier exécutables.

 

Voici un fichier qui est la compilation de 3 autres : il permet de supprimer le timeshift, en créant au passage le disque réseau Z, sans qu'il soit utile de savoir le faire manuellement. Il évite de se tromper de dossier (si on supprime records, on n'a plus d'enregistrements). Il fonctionne même si le dossier .system est caché (il n'est caché que pour l'explorateur)

 

'---------------------------------------------------------------------------------------------------------------------------------------

Public Disk
Disk = "Z"       ' à modifier si pas Z
Call CreDiskRes
Dim Fs, Path, T, Fold, TS, Rep, Texte
Set Fs = CreateObject("Scripting.FileSystemObject")
Path = Disk & ":\.system\timeshift\timeshift"
if Fs.folderExists(Path) Then
 Set Fold = Fs.GetFolder(Path)
 TS = left(Fold.Size/1024/1024/1024,4)
 Texte = "La taille du timeshift est " & TS & " Go" & vbcrlf & "Confirmez sa suppression"
 if MsgBox(Texte,vbYesNo + vbQuestion) = vbNo Then WScript.Quit     
    Fs.deletefolder Path, True
    WScript.echo "Dossier Timeshift supprimé"
Else
    Wscript.echo "Timeshift avait déjà été supprimé"
end If
Wscript.Quit
'
sub CreDiskRes
   Dim Ndecod
   Ndecod = "NEUFTVSTB_MA_2420"
   Dim nsCommand,WshShell, oShell, oExec
   Dim Ch,Lig, adres
   Dim Fs,Wnet
   Set WshShell = WScript.CreateObject("Wscript.Shell")
   Set oExec = WshShell.Exec("nslookup -opt " & Ndecod)
   Ch = oExec.StdOut.ReadAll
   If Len(Ch) < 50 Then
     WScript.Echo "Votre décodeur ne s'appelle pas " & Ndecod & vbCrLf _
     & "Vous allez être redirigé sur une procédure qui va vous donner" & vbCrLf _
     & "La liste et les adresses des périphériques connectés" & vbCrLf _
     & "Notez le nom du décodeur et reportez le en ligne 2 de la sub CreDiskRes" & vbCrLf _
     & "comme ceci : Ndecod = " & Chr(34) & "NOUVEAU_NOM" & Chr(34)
     Call ListeDesIP
   End if   
   X = InStr(1,Ch,"192.168")
   Ch = Mid(Ch,X+11)   '  Routeur
   X = InStr(1,Ch,"192.168")
   adres = Mid(Ch,x,12)
   set oExec = nothing
   set WshShell = nothing
   Set Fs = WScript.CreateObject("Scripting.FileSystemObject")
   If Fs.DriveExists(Disk & ":") Then
      If Not Fs.FolderExists(Disk & ":\.system\timeshift") Then
        Msgbox "La lettre " & Disk & " est déjà utilisée, modifiez la ligne 2 du présent fichier"
        WScript.Quit
      End if
   Else
      Set Wnet = WScript.CreateObject("Wscript.Network")
      Wnet.MapNetworkDrive Disk & ":","\\" & adres & "\disque_interne"
      Set Wnet = nothing
   End If
End Sub
'
Sub ListeDesIP()
    Dim WshShell, oExec, Ch, I
    Set WshShell = WScript.CreateObject("Wscript.Shell")
    For I = 20 To 99
        Set oExec = WshShell.Exec("nslookup 192.168.1." & I)
        Ch = oExec.StdOut.ReadAll
        If Len(Ch) > 50 Then WScript.Echo Ch
    Next
    Set WshShell = Nothing
    Set oExec = Nothing
    WScript.Quit
End sub   

' -----------------------------------------------------------------------------------------------------------