Récursivité

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 141 fois - Téléchargée 55 fois

Contenu du snippet

Cet utilitaire permet réaliser des opérations de façon récursive sur tous les fichiers d'une arborescence. Je l'utilise par exemple pour modifier des images "en bloc" avec ImageMagick.

Source / Exemple :


function doThings (byref folder, cmdToDo)
	dim f, subF, cmdLine, baseFileName, extension

	for each f in folder.Files
		cmdLine=cmdToDo
		baseFileName=f.parentFolder & "\" & fso.GetBaseName(f)
		extension=fso.GetExtensionName(f)
		cmdLine=replace(cmdLine,"#FILE#",baseFileName)
		cmdLine=replace(cmdLine,"#EXT#",extension)
		wsh.run cmdLine,,true
		
	next
	for each subF in folder.SubFolders
		doThings subF, cmdToDo
	next
end function
'****************************************************
sub main()
	dim startDir, fold, cmdToDo
	dim HELP, RC, folder

	RC=chr(13) & chr(10)

	HELP = ""
	HELP = HELP & "Par exemple, la commande suivante..." & RC & RC
	HELP = HELP & "   convert -geometry 50% -quality 70 #FILE#.#EXT# #FILE#.jpg" & RC & RC
	HELP = HELP & "...convertit tous les fichiers rencontrés en .jpg avec une qualité de 70% "
	HELP = HELP & "et en réduisant la taille de 50%" & RC & RC
	HELP = HELP & "(Pour chaque fichier rencontré, recursit.vbs applique la commande en remplacant "
	HELP = HELP & "#FILE# et #EXT# respectivement par le nom du fichier en cours et son extension.)"

	

	
	startDir=inputbox("Répertoire de départ:")
	'startDir="c:\_datas\barchetta\Photos1"
	if startDir="" then exit sub 

	cmdToDo=inputbox("Que faire avec les fichiers ? (tapez ? pour avoir de l'aide)")
	'cmdToDo="mogrify -quality 70 -geometry 50% #FILE#.#EXT#"

	
	while ucase(cmdToDo)="?" and cmdToDo<>""
		msgbox HELP
		cmdToDo=inputbox("Que faire avec les fichiers ? (tapez ? pour avoir de l'aide)")
	wend
	if cmdToDo="" then exit sub
	
	set folder=fso.GetFolder(startDir)
	doThings folder, cmdToDo
end sub
'****************************************************
dim fso, wsh

set fso=CreateObject("Scripting.FileSystemObject")
Set wsh = WScript.CreateObject ("WSCript.shell")

main

Conclusion :


Pour utiliser cet utilitaire, enregistrez ce code dans un fichier ".vbs". Ensuite, il suffit de cliquez deux fois dessus.

A voir également

Ajouter un commentaire

Commentaire

pkoi ne pas utiliser une boucle ?
Une fonction récursive est plus longue, et peut s' arrêter

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.