Ce n'est peut-être pas ce que vous cherchez, mais j'utiliserais Cygwin et l'utilitaire de recherche * nix:
find dir1 -name "*.ext" | while read i; do zip "$i.zip" "$i"; done
"find" commence à "dir1" et revient, en faisant correspondre tout avec un nom de la forme "* .ext". Il produit une liste de correspondances, dirigée vers "While read i", qui lit chaque ligne (un chemin correspondant) dans la variable "i". Pour chaque valeur différente de i, la commande "zip" est exécutée, comprimant le fichier dans une archive zip du même nom (et du même chemin), mais avec ".zip" ajouté.
Notez que ce qui précède ne supprimera pas le fichier original. J'aurais pu ajouter "rm $ i" après la commande zip pour le faire, mais il est préférable de créer les archives en une étape, puis d'utiliser:
find dir1 -name "*.ext" | while read i; rm "$i"; done
pour rechercher et supprimer les originaux. Une autre bonne chose à faire pour tester votre ligne avant de l'exécuter est de faire écho à la commande, plutôt que de l'exécuter.
find dir1 -name "*.ext" | while read i; do echo zip "$i.zip" "$i"; echo rm "$i"; done
Cela vous montrera chacune des commandes zip et rm que cela ferait si vous supprimiez les échos, afin que vous puissiez vous assurer que vous agissez correctement. Ensuite, supprimez les échos pour le faire réellement.
S'il existe un bon moyen de faire cela avec les utilitaires Windows courants, je ne le sais pas.