Remplace une chaine de caractères par une autre pour tous les fichiers sélectionnés (vbscript)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 18 474 fois - Téléchargée 24 fois

Contenu du snippet

En fait, j'avais besoin d'automatiser le traitement des scripts du répertoire Sysvol.
Rien de plus pénible que de modifier un a un tous les scripts quand on change une imprimante partagée, un nom de répertoire, ou un serveur... Le but était donc de créer un script qui change une valeur donnée pour tous les scripts où elle se trouve.
Donc à force de recherches et avec l'aide de JMO sur ce forum, voici la naissance de ce script qui rend bien des services.

Il est paramètré pour prendre en compte les scripts, de préférence, mais libre à vous de le modifier selon vos besoins. Attention cependant, il respecte la casse!!

Vous exécutez le script et tout est automatisé:
  • InputBox: vous entrez ce que vous voulez modifier
  • Inputbox: vous entrez la valeur de remplacement
  • MsgBox: petit avertissement pour le plaisir ;-)
  • commonDialog: selection du type de fichier, du répertoire et des fichiers
  • MsgBox: c'est fait!

Source / Exemple :


'---------------------------------------
'Remplace une valeur par une autre 
'pour tous les fichiers selectionnés
'---------------------------------------

Option Explicit
Dim Saisie1, Saisie2
Saisie1 = InputBox(vbCrLf&vbCrLf&vbCrLf&vbCrLf&"Quelle chaine de caractères" &_
          " voulez-vous remplacer ???","Modification par lot", "ligne")
If Saisie1 = "" Then WScript.Quit

Saisie2 = InputBox(vbCrLf&vbCrLf&vbCrLf&vbCrLf&"Par quelle chaine de caractères" &_
          " voulez-vous remplacer la chaine " & Saisie1 &_
          " ???","Modification par lot", "nouvelle ligne")
If Saisie2 = "" Then WScript.Quit

MsgBox vbCrLf&"Choisissez maintenant tous les fichiers" &_
          vbCrLf&"pour lesquels vous voulez remplacer la chaine:" &_
	  vbCrLf&Saisie1, vbExclamation, "Modification par lot"

Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fso, i, j, strtmp, Resultat
Set fso = CreateObject("Scripting.FileSystemObject")

'affiche une boite de dialogue à choix multiples
'*****valable uniquement sur XP*****
Dim objDialog, intResult, arrFiles, strPath, strFile
Set objDialog = CreateObject("UserAccounts.CommonDialog")
objDialog.Filter = "VBScript |*.vbs|Java Script| *.js|Batch| *.bat|" &_
				"Fichiers Texte| *.txt |Tous les fichiers|*.*"
objDialog.Flags = &H0200
objDialog.FilterIndex = 1
objDialog.InitialDir = "C:\"
intResult = objDialog.ShowOpen

If intResult = 0 Then
	Wscript.Quit
Else
	arrFiles = Split(objDialog.FileName, " ")
	For i = 1 to Ubound(arrFiles)
		strFile = arrFiles(i)
		   Dim objTextStream
		   Set objTextStream = Fso.OpenTextFile(strFile, ForReading)
		   Resultat = objTextStream.ReadAll
		   strtmp = split(Resultat,"")
			For j = 0 to Ubound(strtmp)
				If instr(trim(strtmp(j)),Saisie1) Then
					strtmp(j) = Replace(strtmp(j), Saisie1, Saisie2)
				End If
				objTextStream.Close
				Set objTextStream = Fso.OpenTextFile(strFile, ForWriting, True)
				objTextStream.Write strtmp(j) 
				objTextStream.Close
			Next
	Next
End If

Set objTextStream = Nothing
Set fso = Nothing
Set objDialog = Nothing
MsgBox "Modifications effectuées !!!", vbInformation, Now()

Conclusion :


Voilà, j'espère qu'il rendra service à d'autres personne comme moi.
Grand grand merci à JMO !!!!

A voir également

Ajouter un commentaire

Commentaires

Messages postés
78
Date d'inscription
vendredi 4 février 2005
Statut
Membre
Dernière intervention
6 octobre 2008

Ah oui, j'oubliais aussi...
Si la boîte de dialogue ne s'affiche pas à la fin, c'est rien n'a été fait...
solution: sélectionnez moins de fichiers à traiter en même temps.... ;-)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.