Bonjour,
J'ai un souci, je bloque sur un truc et je sens que c'est tout con, mais étant plus bidouilleur que développeur, je n'arrive pas à me débloquer.
Bon, déjà de base le truc est un peu alambiqué, mais c'est comme ça que ce sera le plus pratique pour moi une fois codé et fonctionnel.
C'est un script pour 7ziper des logs IIS automatiquement, basé sur une liste contenue dans un txt. On entre le chemin des logs, une regex pour le format des noms de fichiers et une regex de remplacement avec des groupes basés sur la regex des noms de fichiers.
Voici le txt (chemin;Regex_Search;extension;Regex_Replace) :
E:/chemin/vers/les/logs/W3SVC85/;^(u_ex)([0-9]{2})([0-9]{2})([0-9]{2})\.log;log;20${2}-${3}_IIS_Logs
Là où ça coince, c'est à la fin (forcément).
Voici une idée du script :
Juste pour préciser, j'ai viré les initialisations de variables et autres die pour clarifier le truc.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 open Paths_TXT,"<$Paths_TXT"; # Pour chaque ligne while (my $str_LastLog = <Paths_TXT>) { chomp $str_LastLog; # Vérif que le format est OK + Zap les lignes commentées. if ($str_LastLog =~ /^([A-Z|\/].*);(.*);(.*);(.*)/) { # Récup des données. $Log_Chemin = $1; $Log_Regex_Search = $2; $Log_Ext = $3; $Log_Regex_Replace = $4; # On va dans le bon dossier chdir("$Log_Chemin"); my $pwd = cwd(); # Check 1 print "Chemin = $Log_Chemin\n"; print "Extension = $Log_Ext\n"; print "Search = $Log_Regex_Search\n"; print "Replace = $Log_Regex_Replace\n\n"; print "Chemin apres chdir : ".$pwd."\n\n"; # C'est ici que ça coince # Pour chaque fichier dans $Log_Chemin correspondant à $Log_Regex_Search... for my $File_EnCours (<*.$Log_Ext>) { $Create_Folder = ($File_EnCours =~ s/$Log_Regex_Search/$Log_Regex_Replace/r); # Check 2 print "\n-------------\n"; print "$File_EnCours \n"; print "$Create_Folder \n"; } }
Check 1 :
Check 2 :Chemin = E:/chemin/vers/les/logs/W3SVC85/
Extension = log
Search = ^(u_ex)([0-9]{2})([0-9]{2})([0-9]{2})\.log
Replace = 20${2}-${3}_IIS_Logs
Chemin apres chdir : E:/chemin/vers/les/logs/W3SVC85
-------------
u_ex130116.log
20${2}-${3}_IIS_Logs
-------------
u_ex140304.log
20${2}-${3}_IIS_Logs
-------------
u_ex140311.log
20${2}-${3}_IIS_Logs
-------------
u_ex140322.log
20${2}-${3}_IIS_Logs
Bien sûr, j'ai testé en mettant le replace directement :
Qui me sort un fabuleux :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 # C'est ici que ça coince # Pour chaque fichier dans $Log_Chemin correspondant à $Log_Regex_Search... for my $File_EnCours (<*.$Log_Ext>) { $Create_Folder = ($File_EnCours =~ s/$Log_Regex_Search/20${2}-${3}_IIS_Logs/r); # Check 2 print "\n-------------\n"; print "$File_EnCours \n"; print "$Create_Folder \n"; }
Check 2 :
Je pense qu'il y a un truc que je fais mal, une option quelque part, ou un petit truc qui coince.-------------
u_ex130116.log
2013-01_IIS_Logs
-------------
u_ex140304.log
2014-03_IIS_Logs
-------------
u_ex140311.log
2014-03_IIS_Logs
-------------
u_ex140322.log
2014-03_IIS_Logs
Bon, j'imagine que les puristes trouveront pleins de trucs barbares ou sacrilèges dans mon script, désolé si je pratique l'équivalent du langage sms en perl (lol).
D'avance merci si vous pouvez m'aider.
Edit : Oui, j'oubliais de préciser que j'utilise strict / warnings, et je n'ai aucune erreur.
Partager