Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Lancement d'un programme Perl depuis l'explorateur Windows

2 réponses
Avatar
knuklal
Bonjour,

Je souhaiterai savoir s'il est possible d'int=E9grer un programme Perl
dans un fichier .bat et de lancer ce dernier =E0 partir de l'explorateur
Windows sachant que le chemin vers le fichier .bat peut contenir des
caract=E8res "espace".

J'ai le .bat mais ne fonctionne qu'=E0 partir d'un chemin ne contenant
pas d'espace :

le voici:







@rem =3D '
@echo off
goto endofperl
@rem ';


# Liste de tous les utilisateurs devant utiliser Synergy/CM
%users=3D(
"tonton" =3D> "BIDON Jean-Luc ",
"tata" =3D> "EDWAR Murphy ",
"koko" =3D> "LARBI Mohamed ",
);

# Liste de toutes les bases Synergy/CM op=E9rationnelles
%bases=3D(
"ABC" =3D> "Chaine de Tele",
"TUT" =3D> "Tutor ",
"PAP" =3D> "Particulier =E0 particulier ",
);

######################################
# Traitement des connexions en cours #
######################################

$monitor =3D `ccm monitor /host monserveur`;
@monitor_lines_tmp =3D split(/\n/,$monitor) ; for $n (1..3) {
shift(@monitor_lines_tmp) };
@monitor_lines =3D ();
foreach (@monitor_lines_tmp)
{
if ($_ =3D~/engine/) { push(@monitor_lines,$_) };
};

print "\nListe des connexions Synergy/CM a Monserveur\n";
print "-------------------------------------------\n";

@baseNuser =3D ();

foreach (@monitor_lines)
{
@col =3D split(/ +/,$_);
push(@baseNuser,substr($col[5],30)." ".$col[0]);
};

@baseNuser =3D sort @baseNuser;

@UsersBDD =3D ();
for $q (0..$#baseNuser)
{
@parties =3D split(/ /,$baseNuser[$q]);
push(@UsersBDD,$parties[0]);
push(@UsersBDD,$parties[1]);
};

$i =3D 0;
while ($i<=3D$#baseNuser)
{
$basetmp =3D $UsersBDD[$i*2];
print "\nBase: ",$bases{$basetmp}," \n\n";
$j =3D 1;
while ($basetmp eq $UsersBDD[$i*2])
{
print $j,") ",$users{$UsersBDD[$i*2+1]},"\n";
$j++;
$i++;
};
};

print "\nAu total: ",$#monitor_lines+1," connexion(s)
actuellement.\n\n\n";

######################################
# Traitement des licences consomm=E9es #
######################################

$lmgr =3D `ccm lmgr_status`;
@sp1 =3D split(/---- --- ---- ---- ------ --------
----------------/,$lmgr);
@sp2 =3D split(/Default license timeout/,$sp1[1]);
$sp3 =3D $sp2[0];
@lmgr_lines =3D split(/\n/,$sp3) ; shift(@lmgr_lines);

@all_users =3D keys %users;

use constant MAX_LIC =3D> 99;
$nbr_lic =3D 0;
@users_lic =3D ();
$user =3D "";

foreach (@lmgr_lines)
{
$ligne =3D $_;
foreach (@all_users)
{
if ($ligne=3D~/$_/ && $user ne $_)
{
$nbr_lic++;
push(@users_lic,$nbr_lic.") ".$users{$_});
$user =3D $_;
};
};
};

print "Liste des utilisateurs consommant une licence Synergy/CM\n";
print "--------------------------------------------------------\n\n";

foreach (@users_lic)
{
print $_,"\n";
};

print "\nAu total: ",$nbr_lic," attribution(s) de licence sur
",MAX_LIC,".\n";

if ($nbr_lic > MAX_LIC) { print "\nATTENTION: DEPASSEMENT DU NOMBRE DE
LICENCES AUTORISES POUR ITEC/CRS/FIN...\n" };

print "\n\n- APPUYER SUR LA TOUCHE ENTREE POUR CONTINUER -\n";
$ch =3D <STDIN>;

__END__
:endofperl
perl -e "$s =3D shift; $c =3D $s =3D~ /.bat$/ ? $s : $s.'.bat'; $p =3D (-x =
$c)
? '' : '- S '; system('perl '.$p.$c.' '.join(' ',@ARGV)); exit $?;" %0
%1 %2 %3 %4 %5 %6 %7 %8 %9








Merci d'avance pour les r=E9ponse

Cordialement,

Knuklal

2 réponses

Avatar
gvdmoort
La distribution ActivePerl pour windows comprend un utilitaire
pl2bat.bat qui convertit un fichier perl en fichier bat. Sur le
système où je travaille, les fichiers bat ainsi créés fonctionnent
même si il y a un/des espaces dans le chemin.

Les fichiers batch en question comprennent se présentent ainsi :

@rem = '--*-Perl-*--
@echo off
if "%OS%" == "Windows_NT" goto WinNT
perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
goto endofperl
:WinNT
perl -x -S %0 %*
if NOT "%COMSPEC%" == "%SystemRoot%system32cmd.exe" goto endofperl
if %errorlevel% == 9009 echo You do not have Perl in your PATH.
if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
goto endofperl
@rem ';
# début des instructions Perl
#! /usr/bin/perl -w
# [...]
# (fin du script perl)
__END__
:endofperl

Soit vous vérifiez l'existence de l'utilitaire pl2bat.bat et vous
l'utilisez, soit vous modifiez à la main le vôtre sur cette base,
soit si ça n'arrange rien vous donnez à vos scripts perl une
extension spécifique comme .pl et vous intervenez au niveau de
l'explorateur windows pour que le programme associé soit l'exécutable
Perl, ce qui me semble plus simple.

Bien à vous,

G.
Avatar
knuklal
Merci beaucoup pour votre réponse qui me convient pleinement !

Knuklal.