REM ==============================
REM Fichier : search_replace_text_in_a_tree.vbs
REM Desc : rechercher/remplacer du texste dans une série de fichiers d'une arborescence
REM Auteur : X. Gangand
REM Année : 2009
REM Version : 1.13
REM ==============================
REM History 1.01 modifié les touches de raccourcis (pas de trait d'union, une seule lettre)
REM History 1.02 ajout y et z pour ouvrir le dossier trouvé
REM History 1.03 fonction historique
REM History 1.04 ajout '| sort' à la commande dir (dir /on ne trie pas la globalité)
REM History 1.05 xcd (Change Dir) et xff (Find File) abandonné, un seul fichier fusionné, XGO.VBS (il sera appelé depuis des fichiers .bat : x1=recherche dossiers+explorer.exe, x2=recherche fichier+explorer.exe, x1=recherche dossiers+cmd, x2=recherche fichier+cmd)
REM History 1.10 un seul fichier fusionné, OPENDIR.VBS (appelé depuis le fichier od.bat), ajouté la vérification de l'existence du dossier/fichier avant lancement
REM History 1.11 ajout "tentative de lancement du dossier parent" si fichier/dossier trouvé inexistant
REM History 1.12 modification option l en ld, lf, ldf, lfd
REM History 1.13 ajout procédure RelancerOpenDirAvecOption_x
REM Projets :
REM 1. modifier (peut-être) la mise à jour du catalogue
REM non pas avec la fonction dir mais depuis .vbs directement (pb rapidité)
REM Projets réalisés :
REM 1. modifier la procédure de recherche pour trouver la plus rapide
REM ReadAll ou parcours ligne par ligne ?
REM résultats : stocker en tableau prend énormément de place mémoire => utiliser lecture directe depuis le fichier
Option Explicit
'notes personnelles
If WSHNetwork("computername") = "xavpc" Then
Wscript.Echo _
"Voir http://xgangand.free.fr/myfiles/s/list_folders_recursively.zip" & vbcrlf & _
"pour s'affranchir du problème de la commande 'dir' et les accents." & vbcrlf & _
"" & vbcrlf & _
"Ajouter inputbox avec menu derniers historiques si ligne de commande vide." & vbcrlf & _
""
End If
Const DebugON = FALSE 'mettre TRUE pour afficher les messages
Const ForAppending = 8
Const TC = 1 'vbTextCompare = 1
Dim g_tArg, g_nbArgs, g_bTrouve, g_sAction, g_sHistoryFile
Dim g_sCatalog, gCatFileDIR, gCatFileFILE
gCatFileDIR = Script_ParentFolder & "opendir_folders.txt"
gCatFileFILE = Script_ParentFolder & "opendir_files.txt"
g_sHistoryFile = Script_ParentFolder & "opendir_history.txt"
Dim oFSO, oDF, sLine 'oDF = oDataFile
CommandLine
Sub CommandLine
REM ===========================================
REM = Analyse ligne de commande
REM ===========================================
Set g_tArg = Wscript.Arguments
g_nbArgs = g_tArg.Count
If g_nbArgs = 0 Then
Syntax
Wscript.Quit(0)
End If
Select Case LCase(g_tArg(0))
Case "?" : Syntax
Case "/?" : Syntax
Case "-?" : Syntax
Case "-help" : Syntax
Case "--help" : Syntax
Case "h" : History
Case "ld" : Lister_1 "dir", ""
Case "lf" : Lister_1 "file", ""
Case "ldf" : Lister_1 "dirETfile", ""
Case "lfd" : Lister_1 "fileETdir", ""
Case "u" : Update_Catalogs
Case "r" : Update_Catalogs
Case "v" : View_Catalog
Case "e" : ShellRun "cmd /c explorer " & Script_ParentFolder
Case "c" : Search_1 "dir+file", "cmd"
Case "s" : Search_1 "dir+file", "explorer"
Case "x" : Search_1 "dir+file", "explorer"
Case "y" : Search_1 "dir+file", "explorer /select" 'possiblité ouvrir dossier parent et sélectionner dossier trouvé
Case "z" : Search_1 "dir+file", "explorer /root" 'possiblité ouvrir dossier en tant que racine (explorer /root, <dossier>)
Case Else : RelancerOpenDirAvecOption_x
End Select
End Sub
Sub AfficherRecherche(sLieu)
REM ===============================================
REM = Afficher pour info en attendant les résultats
REM ===============================================
Dim i, s
For i = 1 To Wscript.Arguments.Count-1
s = s & " " & Wscript.Arguments(i)
Next
If DebugON = TRUE Then Wscript.Echo "Recherche de " & s & " dans " & sLieu
End Sub
Sub AppendToHistoryFile(s)
REM =========================
REM = Enregistre la recherche
REM =========================
Dim oFSOatfh, fAppend
Set oFSOatfh = CreateObject("Scripting.FileSystemObject")
Set fAppend = oFSOatfh.OpenTextFile(g_sHistoryFile, ForAppending, True)
fAppend.WriteLine Now & " " & s
Set oFSOatfh = Nothing
End Sub
Function DossiersPreScannes(t, sCatFile)
REM ===========================================
REM = Lister les dossiers des catalogues
REM ===========================================
Set oFSO = CreateObject("Scripting.FileSystemObject")
If oFSO.FileExists(sCatFile) Then
Dim f, sLine, n
n = -1
Set f = oFSO.OpenTextFile(sCatFile)
'passer les lignes d'en-tête
Do
sLine = f.ReadLine
Loop Until sLine = "REM * Dossiers scannés :"
'lire les dossiers déjà scannés
Do
sLine = f.ReadLine
If sLine = "REM **************************************************" Then Exit Do
n = n + 1
Redim Preserve t(n)
t(n) = Right(sLine, Len(sLine) - Len("REM * - "))
Loop
If n<>-1 Then
Dim i
For i = 0 To n
DossiersPreScannes = DossiersPreScannes & " " & t(i)
Next
End If
f.Close
Set f = Nothing
Set oFSO = Nothing
Else
DossiersPreScannes = "aucun"
End If
Set oFSO = Nothing
End Function
Function Folder_Exists(sFolder)
REM ===================================
REM = Vérifier l'existence d'un dossier
REM ===================================
Set oFSO = CreateObject("Scripting.FileSystemObject")
If oFSO.FolderExists(sFolder)=TRUE Then Folder_Exists=TRUE Else Folder_Exists=FALSE
Set oFSO = Nothing
End Function
Sub History
REM =========
REM = History
REM =========
ShellRun "cmd /c start " & g_sHistoryFile
End Sub
Sub Lister_1(sOrdre, sAction)
REM =========================================
REM = Lister depuis catalogues DIR et/ou FILE
REM =========================================
g_bTrouve = FALSE
Select Case sOrdre
Case "dir" : 'recherche seulement dans gCatFileDIR
Lister_2 gCatFileDIR, sAction
Case "file" :
Lister_2 gCatFileFILE, sAction
Case "dir+file" : 'LE PLUS IMPORTANT !!!
'recherche seulement dans DIR (gCatFileDIR) puis dans FILE si rien trouvé dans DIR
Lister_2 gCatFileDIR, sAction
If g_bTrouve=FALSE Then
If DebugON = TRUE Then Wscript.Echo ""
Lister_2 gCatFileFILE, sAction
End If
Case "file+dir" : 'recherche seulement dans FILE puis DIR si rien trouvé dans FILE
Lister_2 gCatFileFILE, sAction
If g_bTrouve=FALSE Then
If DebugON = TRUE Then Wscript.Echo ""
Lister_2 gCatFileDIR, sAction
End If
Case "fileETdir" :
Lister_2 gCatFileFILE, sAction
Lister_2 gCatFileDIR, sAction
Case "dirETfile" :
Lister_2 gCatFileDIR, sAction
Lister_2 gCatFileFILE, sAction
End Select
End Sub
Sub Lister_2(sCatalog, sAction)
REM ==============================
REM = Cherche un dossier et lister
REM ==============================
VerifierExistenceCatalogue sCatalog
AfficherRecherche sCatalog
Select Case g_nbArgs
Case 2 :
List_1_Param Slash(g_tArg(1))
Case 3 :
List_2_Param Slash(g_tArg(1)), Slash(g_tArg(2))
Case 4 :
List_3_Param Slash(g_tArg(1)), Slash(g_tArg(2)), Slash(g_tArg(3))
Case 5 :
List_4_Param Slash(g_tArg(1)), Slash(g_tArg(2)), Slash(g_tArg(3)), Slash(g_tArg(4))
Case Else :
Msgbox "Limitez votre recherche à 4 arguments."
Wscript.Quit(0)
End Select
RechercheFinie sCatalog
End Sub
Sub List_1_Param(a1)
Do
sLine = oDF.ReadLine
If Instr(1, sLine, a1, TC)>0 Then
g_bTrouve = TRUE: Wscript.Echo sLine 'g_nbTrouves = g_nbTrouves + 1
End If
Loop Until oDF.AtEndOfStream
End Sub
Sub List_2_Param(a1,a2)
Do
sLine = oDF.ReadLine
If Instr(1, sLine, a1, TC)>0 And _
Instr(1, sLine, a2, TC)>0 Then
g_bTrouve = TRUE: Wscript.Echo sLine 'g_nbTrouves = g_nbTrouves + 1
End If
Loop Until oDF.AtEndOfStream
End Sub
Sub List_3_Param(a1,a2,a3)
Do
sLine = oDF.ReadLine
If Instr(1, sLine, a1, TC)>0 And _
Instr(1, sLine, a2, TC)>0 And _
Instr(1, sLine, a3, TC)>0 Then
g_bTrouve = TRUE: Wscript.Echo sLine 'g_nbTrouves = g_nbTrouves + 1
End If
Loop Until oDF.AtEndOfStream
End Sub
Sub List_4_Param(a1,a2,a3,a4)
Do
sLine = oDF.ReadLine
If Instr(1, sLine, a1, TC)>0 And _
Instr(1, sLine, a2, TC)>0 And _
Instr(1, sLine, a3, TC)>0 And _
Instr(1, sLine, a4, TC)>0 Then
g_bTrouve = TRUE: Wscript.Echo sLine 'g_nbTrouves = g_nbTrouves + 1
End If
Loop Until oDF.AtEndOfStream
End Sub
Function ParentFolder(s)
REM ====================================
REM = Dossier parent d'un chemin complet
REM ====================================
ParentFolder = CreateObject("Scripting.FileSystemObject").GetParentFolderName(s)
End Function
Sub RechercheFinie (sLieu)
REM ====================
REM = Recherche terminée
REM ====================
oDF.Close
Set oDF = Nothing
Set oFSO = Nothing
If g_bTrouve = FALSE Then
If DebugON = TRUE Then Wscript.Echo "Aucun résultat dans " & sLieu 'afficher aucun résultat si vide pour dossiers ET fichiers
Else
If DebugON = TRUE Then Wscript.Echo "Recherche réussie dans " & sLieu
End If
End Sub
Sub RelancerOpenDirAvecOption_x
REM =================================================
REM = Aucune option donnée => relancer opendir avec x
REM =================================================
ShellRun "%comspec% /c opendir.vbs x " & TouteLaLigneDeCommande
End Sub
Sub SaveToFile (sTexte, sFile)
REM ========================================
REM = Sauvegarde un texte dans un fichier
REM ========================================
Dim oFSO, f1
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set f1 = oFSO.CreateTextFile(sFile)
f1.Write sTexte
f1.Close
Set f1 = Nothing
Set oFSO = Nothing
End Sub
Sub Search_1(sOrdre, sAction)
REM ========================================================
REM = Lancer la recherche dans les catalogues DIR et/ou FILE
REM ========================================================
g_bTrouve = FALSE
Select Case sOrdre
Case "dir" : 'recherche seulement dans gCatFileDIR
Search_2 gCatFileDIR, sAction
Case "file" :
Search_2 gCatFileFILE, sAction
Case "dir+file" : 'LE PLUS IMPORTANT !!!
'recherche seulement dans DIR (gCatFileDIR) puis dans FILE si rien trouvé dans DIR
Search_2 gCatFileDIR, sAction
If g_bTrouve=FALSE Then
If DebugON = TRUE Then Wscript.Echo ""
Search_2 gCatFileFILE, sAction
End If
Case "file+dir" : 'recherche seulement dans FILE puis DIR si rien trouvé dans FILE
Search_2 gCatFileFILE, sAction
If g_bTrouve=FALSE Then
If DebugON = TRUE Then Wscript.Echo ""
Search_2 gCatFileDIR, sAction
End If
Case "fileETdir" :
Search_2 gCatFileFILE, sAction
Search_2 gCatFileDIR, sAction
Case "dirETfile" :
Search_2 gCatFileDIR, sAction
Search_2 gCatFileFILE, sAction
End Select
End Sub
Sub Search_2(sCatalog, sAction)
REM ====================================================
REM = Cherche un dossier et l'ouvre dans une session cmd
REM ====================================================
VerifierExistenceCatalogue sCatalog
AfficherRecherche sCatalog
REM sAction : cmd ou bien explorer...
g_sAction = sAction
Select Case g_nbArgs
Case 2 :
Search_1_Param Slash(g_tArg(1))
Case 3 :
Search_2_Param Slash(g_tArg(1)), Slash(g_tArg(2))
Case 4 :
Search_3_Param Slash(g_tArg(1)), Slash(g_tArg(2)), Slash(g_tArg(3))
Case 5 :
Search_4_Param Slash(g_tArg(1)), Slash(g_tArg(2)), Slash(g_tArg(3)), Slash(g_tArg(4))
Case Else :
Msgbox "Limitez votre recherche à 4 arguments."
Wscript.Quit(0)
End Select
RechercheFinie sCatalog
End Sub
Sub Search_1_Param(a1)
Do
sLine = oDF.ReadLine
If Instr(1, sLine, a1, TC)>0 Then 'sans >0, Instr ne fonctionne pas car kil renvoie une position
Trouve sLine: Exit Do
End If
Loop Until oDF.AtEndOfStream
End Sub
Sub Search_2_Param(a1, a2)
Do
sLine = oDF.ReadLine
If Instr(1, sLine, a1, TC)>0 And _
Instr(1, sLine, a2, TC)>0 Then
Trouve sLine: Exit Do
End If
Loop Until oDF.AtEndOfStream
End Sub
Sub Search_3_Param(a1, a2, a3)
Do
sLine = oDF.ReadLine
If Instr(1, sLine, a1, TC)>0 And _
Instr(1, sLine, a2, TC)>0 And _
Instr(1, sLine, a3, TC)>0 Then
Trouve sLine: Exit Do
End If
Loop Until oDF.AtEndOfStream
End Sub
Sub Search_4_Param(a1, a2, a3, a4)
Do
sLine = oDF.ReadLine
If Instr(1, sLine, a1, TC)>0 And _
Instr(1, sLine, a2, TC)>0 And _
Instr(1, sLine, a3, TC)>0 And _
Instr(1, sLine, a4, TC)>0 Then
Trouve sLine: Exit Do
End If
Loop Until oDF.AtEndOfStream
End Sub
Function ShellRun(sCmd)
REM ===========================================
REM = Lancer une commande Run de l'object Shell
REM = vers le fichier sOutputFile (synchrone)
REM = ATTENTION : toujours vérifier cmd /c !!!
REM ===========================================
Dim oShell
Set oShell = CreateObject("Wscript.Shell")
ShellRun = oShell.Run(sCmd, 0, True)
'1 = Activates and displays a window
'true = bWaitOnReturn, Boolean value
'indicating whether the script should
'wait for the program to finish executing
'before continuing to the next statement in your script.
Set oShell = Nothing
End Function
Function Slash(s)
REM =======================
REM = Remplace / par \ (pour faciliter la saisie lors de la recherche)
REM =======================
Slash = Replace(s, "/", "\")
End Function
Sub View_Catalog
REM =======================
REM = Afficher le catalogue
REM =======================
ShellRun "cmd /c start " & gCatFileDIR
ShellRun "cmd /c start " & gCatFileFILE
End Sub
Function Script_ParentFolder
REM ======================================
REM = Retourne le dossier parent du script
REM ======================================
Dim sfn
sfn = Wscript.ScriptFullName
Script_ParentFolder = Left(sfn, Len(sfn) - Len(Wscript.ScriptName))
End Function
Sub Syntax
REM ==============
REM = Syntaxe/Aide
REM ==============
Dim sMsg, v
v = vbCrLf
sMsg = _
"*******************************************************************************************" & v & _
"OPENDIR.VBS (ou bien od.bat, qui appelle opendir.vbs)" & vbcrlf & _
"permet de se rendre rapidement dans un dossier," & v & _
"en spécifiant une/plusieurs parties d'un chemin complet." & v & _
"Il utilise deux catalogues." & v & _
"" & v & _
"Pour créer le catalogue, la commande interne dir est utilisée" & v & _
"(donc la recherche sur les caractères accentués sera aléatoire)." & v & _
"" & v & _
"Pour des questions de rapidité, la recherche est limitée à 4 paramètres maximum." & v & _
"Le code du script est facilement modifiable pour augmenter cette limite." & v & _
"Le catalogue n'a pas de limite de dossiers de départ." & v & _
"Pour faciliter la saisie, les / sont automatiquement remplacés par des \," & v & _
"vous pouvez saisir celui qui vous arrange." & v & _
"" & v & _
"" & v & _
"***** Utilisations courantes *****" & v & _
"1. créer le catalogue :" & v & _
" od r|u dossier [dossier | dossier | ... ]" & v & _
"2. mettre à jour le catalogue (r=refresh, u=update)" & v & _
" od r|u [dossier | dossier | ... ]" & v & _
"3. aller dans un dossier (c=cmd, x=explorer) :" & v & _
" od c|x|y|z param1 [param2] [param3] [param4]" & v & _
"4. lister des dossiers" & v & _
" od ld|lf|lfd|ldf param1 [param2] [param3] [param4]" & v & _
"Pour revenir au dossier précédent, taper popd puis entrée." & v & _
"" & v & _
"***** Exemples *****" & v & _
"1. créer le catalogue :" & v & _
" od u c:\windows ""d:\docs perso""" & v & _
" crée le catalogue avec les deux dossiers c:\windows ""d:\docs perso""" & v & _
" od r p:\" & v & _
" crée le catalogue avec le dossier p:\" & v & _
"" & v & _
"2. mettre à jour le catalogue" & v & _
" od u" & v & _
" met le catalogue à jour avec les dossiers scannés auparavant" & v & _
"" & v & _
"3. aller dans un dossier :" & v & _
" od x windows system32" & v & _
" va dans le premier dossier contenant les mots windows ET system32" & v & _
" od c \myfiles\" & v & _
" va dans le premier dossier contenant \myfiles\" & v & _
" od s -update" & v & _
" va dans le premier dossier contenant le mot -update" & v & _
" va dans le premier dossier contenant le mot -update" & v & _
"" & v & _
"4. lister des dossiers" & v & _
" od ld windows system32" & v & _
" va lister tous les dossiers contenant les mots windows et system32" & v & _
" od lf \myfiles" & v & _
" va lister tous les fichiers contenant le mot \myfiles" & v & _
" od ldf cuisine c:\ desserts" & v & _
" va lister tous les dossiers puis fichiers contenant cuisine, c:\ et desserts" & v & _
"" & v & _
"" & v & _
"Autres utilisations :" & v & _
" od e" & v & _
" ouvre le dossier parent de opendir.vbs" & v & _
" od v" & v & _
" voir les catalogues fichiers et dossiers" & v & _
"*******************************************************************************************"
Wscript.Echo sMsg
End Sub
Function TouteLaLigneDeCommande
REM ==================================
REM = Reconstitue la ligne de commande
REM ==================================
Dim i
For i = 0 To Wscript.Arguments.Count-1
TouteLaLigneDeCommande = TouteLaLigneDeCommande & " " & Wscript.Arguments(i)
Next
End Function
Sub Trouve(sLine)
REM ==============================
REM = Aller dans le dossier trouvé
REM ==============================
Dim sCmd, sTypeFF
g_bTrouve = TRUE
Wscript.Echo sLine
'vérifier existence résultat
sTypeFF = TypeFF(sLine)
If sTypeFF = "" Then
Wscript.Echo Now & " " & sLine & " n'existe pas (cause possible : problème de caractère avec accent)"
Wscript.Echo Now & " tentative de lancement du dossier parent"
If ParentFolder(sLine) <> sLine Then 'pour éviter boucle infinie
Trouve ParentFolder(sLine)
Exit Sub
Else
Wscript.Quit(0) 'rechercher sur la suite du catalogue ?
End If
End If
Dim sLine2
sLine2 = sLine
If sTypeFF = "file" Then sLine2 = ParentFolder(sLine)
AppendToHistoryFile TouteLaLigneDeCommande 'n'enregistrer que les recherches fructueuses ?
Select Case g_sAction
Case "cmd" :
Dim objShell
Set objShell = CreateObject("WScript.Shell")
Wscript.Echo "Taper popd pour revenir au dossier précédent."
objShell.SendKeys "pushd """ & sLine2 & """"
objShell.SendKeys "{enter}"
Case "explorer" :
sCmd = "explorer.exe /e, /n, """ & sLine2 & """"
ShellRun "cmd /c " & sCmd
Case "explorer /root" :
sCmd = "explorer.exe /e, /n, /root, """ & sLine2 & """"
ShellRun "cmd /c " & sCmd
Case "explorer /select" :
sCmd = "explorer.exe /e, /select, """ & sLine2 & """"
ShellRun "cmd /c " & sCmd
End Select
End Sub
Function TypeFF(s)
REM ===================================================
REM = Détermine si s est un dossier ou fichier existant
REM ===================================================
Dim oFSO
Set oFSO = CreateObject("Scripting.FileSystemObject")
If oFSO.FolderExists(s) Then
TypeFF = "folder"
ElseIf oFSO.FileExists(s) Then
TypeFF = "file"
Else
TypeFF = ""
End If
Set oFSO = Nothing
End Function
Sub Update_Catalogs
REM =================================
REM = Mise à jour des deux catalogues
REM =================================
Update_One_Catalog gCatFileDIR, "dossiers", "/ad"
Update_One_Catalog gCatFileFILE, "fichiers", "/a-d"
'pour un catalogue global (dossiers+fichiers) :
'Update_One_Catalog gCatFileFILE, "dossiers et fichiers", ""
Wscript.Echo _
"" & vbcrlf & _
"Lancer opendir.vbs v pour afficher le résultat du scan."
End Sub
Sub Update_One_Catalog(sCatalog, sType, DirParam)
REM ===========================================
REM = Mise à jour d'un catalogue
REM ===========================================
Dim sDossier, sEntete, sComment, dps, EnsembleDossiers
Dim tDossier()
If g_nbArgs = 1 Then
'u passé seulement en paramètre
'mise à jour du catalogue existant, récupérer les dossiers préscannés
dps = DossiersPreScannes(tDossier, sCatalog)
If dps = "aucun" Then
Wscript.Echo _
"Vous n'avez pas encore utilisé opendir.vbs, la mise à jour n'est pas possible." & vbcrlf & _
"Lancer opendir.vbs avec les options adéquates :" & vbcrlf & _
"Exemple :" & vbcrlf & _
"opendir u c:\" & vbcrlf & _
""
Wscript.Quit(0)
End If
Else
'récupérer les dossiers à scanner depuis la ligne de commande
ReDim tDossier(g_tArg.Count-2)
Dim k
For k = 0 To UBound(tDossier)
tDossier(k) = g_tArg(k+1)
EnsembleDossiers = EnsembleDossiers & " " & tDossier(k)
Next
Wscript.Echo Now & " Création du catalogue '" & sType & "' pour " & EnsembleDossiers
End If
Dim i
sEntete = _
"REM **************************************************" & vbcrlf & _
"REM * Fichier catalogue utilisé par opendir.vbs (ne pas modifier l'en-tête)" & vbcrlf & _
"REM * Mise à jour : " & FormatDateTime(Now, vbLongTime) & vbcrlf & _
"REM * Dossiers scannés :"
'construire en-tête fichier catalogue
For i = 0 To UBound(tDossier)
sDossier = tDossier(i)
If Folder_Exists(sDossier)=FALSE Then sComment = " (dossier absent)" Else sComment = ""
sEntete = sEntete & vbcrlf & _
"REM * - " & sDossier & sComment
Next
sEntete = sEntete & vbcrlf & _
"REM **************************************************" & vbcrlf
'sauvegarder l'en-tête
SaveToFile sEntete, sCatalog
If dps <> "aucun" Then Wscript.Echo Now & " Mise à jour du catalogue '" & sType & "' pour les répertoires :" & dps
'scanner chaque dossier passé en paramètre
For i = 0 To UBound(tDossier)
sDossier = tDossier(i)
If Folder_Exists(sDossier)=TRUE Then
Wscript.Echo Now & " le dossier " & sDossier & " est analysé (" & sType & ") ..."
ShellRun "cmd /c dir """ & sDossier & """ " & DirParam & " /s /b | sort >> " & sCatalog
Else
Wscript.Echo Now & " le dossier " & sDossier & " n'existe pas."
End If
Next
End Sub
Sub VerifierExistenceCatalogue(sCatFile)
REM =============================
REM = Quitter si catalogue absent
REM =============================
Dim oFSO_vec
Set oFSO_vec = CreateObject("Scripting.FileSystemObject")
If oFSO_vec.FileExists(sCatFile)=FALSE Then
Wscript.Echo sCatFile & " n'existe pas, créer d'abord un catalogue avec opendir u ..."
Set oFSO_vec = Nothing
Wscript.Quit(0)
End If
Set oFSO_vec = Nothing
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oDF = oFSO.OpenTextFile(sCatFile)
'passer les lignes d'en-tête
Dim s
oDF.SkipLine
Do
If Instr(oDF.ReadLine, "REM ***********") Then Exit Do
Loop
End Sub
Function WSHNetwork(sData)
REM =================================
REM = Renvoie données WScript.Network
REM =================================
Set WSHNetwork = WScript.CreateObject("WScript.Network")
Select Case LCase(sData)
Case "userdomain" : WSHNetwork = WSHNetwork.UserDomain
Case "username" : WSHNetwork = WSHNetwork.UserName
Case "computername" : WSHNetwork = WSHNetwork.ComputerName
End Select
End Function
'***************************************
'Procédures et fonctions de opendir.vbs
'Mise à jour : lancer cmd puis
'cmd /k pushd P:\_\o & p:\o\vbs\lister_sub_functions_d_un_vbs.vbs opendir.vbs & opendir.vbs_subs_et_functions.txt
'***************************************
'***************************************
'Procédures et fonctions de opendir.vbs
'***************************************
'Sub CommandLine.........................Analyse ligne de commande
'Sub AfficherRecherche(sLieu)............Afficher pour info en attendant les résultats
'Sub AppendToHistoryFile(s)..............Enregistre la recherche
'Fct DossiersPreScannes(t, sCatFile).....Lister les dossiers des catalogues
'Fct Folder_Exists(sFolder)..............Vérifier l'existence d'un dossier
'Sub History.............................History
'Sub Lister_1(sOrdre, sAction)...........Lister depuis catalogues DIR et/ou FILE
'Sub Lister_2(sCatalog, sAction).........Cherche un dossier et lister
'Sub List_1_Param(a1)....................
'Sub List_2_Param(a1,a2).................
'Sub List_3_Param(a1,a2,a3)..............
'Sub List_4_Param(a1,a2,a3,a4)...........
'Fct ParentFolder(s).....................Dossier parent d'un chemin complet
'Sub RechercheFinie (sLieu)..............Recherche terminée
'Sub RelancerOpenDirAvecOption_x.........Aucune option donnée => relancer opendir avec x
'Sub SaveToFile (sTexte, sFile)..........Sauvegarde un texte dans un fichier
'Sub Search_1(sOrdre, sAction)...........Lancer la recherche dans les catalogues DIR et/ou FILE
'Sub Search_2(sCatalog, sAction).........Cherche un dossier et l'ouvre dans une session cmd
'Sub Search_1_Param(a1) .................
'Sub Search_2_Param(a1, a2)..............
'Sub Search_3_Param(a1, a2, a3)..........
'Sub Search_4_Param(a1, a2, a3, a4)......
'Fct ShellRun(sCmd)......................Lancer une commande Run de l'object Shell
'Fct Slash(s)............................Remplace / par \ (pour faciliter la saisie lors de la recherche)
'Sub View_Catalog........................Afficher le catalogue
'Fct Script_ParentFolder.................Retourne le dossier parent du script
'Sub Syntax..............................Syntaxe/Aide
'Fct TouteLaLigneDeCommande..............Reconstitue la ligne de commande
'Sub Trouve(sLine).......................Aller dans le dossier trouvé
'Fct TypeFF(s)...........................Détermine si s est un dossier ou fichier existant
'Sub Update_Catalogs.....................Mise à jour des deux catalogues
'Sub Update_One_Catalog(sCatalog, sT.....Mise à jour d'un catalogue
'Sub VerifierExistenceCatalogue(sCat.....Quitter si catalogue absent
'Fct WSHNetwork(sData)...................Renvoie données WScript.Network
'***************************************