regex search remplace dans le batch

Je veux faire une recherche / remplacer par un motif regex dans Windows batch sur un ensemble de fichiers. Ce sera quelque chose comme:

if the regex matches a line matches then replace it with a new line. 

J’ai aussi besoin d’append une variable dans l’expression rationnelle pour simplement remplacer la valeur. Est-ce que quelqu’un sait comment traiter le script de lot? Je ne suis pas familier avec ça. Certains exemples peuvent être utiles.

Vous pouvez bénéficier de la commande findstr . Il supporte les expressions régulières avec une syntaxe limitée. Dis, tu as des fichiers

 ignore_me.txt rename_me01.txt rename_me02.txt rename_me03.txt rename_me04.txt 

Une commande

 dir /b | findstr "rename_me[0-9][0-9]" 

va sortir

 rename_me01.txt rename_me02.txt rename_me03.txt rename_me04.txt 

OK, pas très bon exemple, car vous pouvez le faire avec le bon vieux ? joker Mon point est que le motif pour findstr est une expression régulière.

Récemment, j’ai eu un problème similaire, mais je me suis ennuyé à essayer de trouver comment remplacer les modèles de regex. Je ne sais pas si cela est possible uniquement avec les commandes Windows natives. Donc, pour une solution plus simple, mais toujours native, je fais référence à Windows Scripting Host . Ma tâche était de trouver tous les fichiers qui ont dans leur nom une date au format jj.mm.aaaa et remplacer cette date par le courant.

Le script pour cela est:

    

Enregistré sous le nom u.wsf et placé dans le dossier de ces fichiers. L’extension est associée à wscript . En double-cliquant sur le fichier, elle s’exécute en mode graphique, mais peut également s’exécuter en mode ligne de commande:

 cscript u.wsf 

Les outils standard sur Unix pour cela sont sed et Perl. Il y a des ports DOS / Windows des deux.

 A:\> sed -i "s/foo/bar/g" file1 file2 file3 A:\> perl -pi -e "s/foo/bar/g" file1 file2 file3 

remplacera “foo” par “bar” dans les fichiers nommés. Sed est plus ancien et l’option -i n’est pas standardisée, et Perl est beaucoup plus polyvalent, étant un langage de programmation complet, et son ensemble de fonctionnalités regex est bien meilleur, mais pour un travail unique, non plus, c’est bien.