Perl | Commande DOS

MrCanard Messages postés 22 Statut Membre -  
MrCanard Messages postés 22 Statut Membre -
Bonjour,

Je voulais savoir comment on intégrait une commande DOS dans un script PERL, car j'ai testé ça :

#!/usr/bin/perl -w

use strict;

my $rep = "";
system $rep;
print $rep;

et même :

#!/usr/bin/perl -w

use strict;

my $rep=`dir`;
print "Repertoire courant: ".$rep."\n";

et encore :

#!/usr/bin/perl -w

use strict;

$rep = system("dir");
print "Repertoire courant: ".$rep."\n";

et il me renvoi toujours cette magnifique erreur :

Can't spawn "cmd.exe": No such file or directory at C:\Documents and Settings\[...]\new.pl
Configuration: Windows XP
Firefox 3.0.1

5 réponses

  1. MrCanard Messages postés 22 Statut Membre 1
     
    Nop toujours ce fameux et très énervant je dois avouer "Can't spawn "cmd.exe" [...]"

    :(
    2
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    et avec
    $rep = system("cmd /c dir");
    dir étant une commande interne
    0
  3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    et
    @args = ("C:/WINDOWS/SYSTEM32/cmd.exe", " /c dir");
    system(@args);
    0
    1. MrCanard Messages postés 22 Statut Membre 1
       
      Ca a l'air de marcher, enfin pas d'erreur mais m'affiche pas ce que dir afficherait et il m'écrit :

      Le chemin d'accès spécifié est introuvable.
      Une erreur s'est produite lors du traitement de : /c dir.
      Repertoire courant : 2

      et il me créé un répertoire .exe et un répertoire dir

      oO
      -1
  4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    et
    @args = ("C:\\WINDOWS\\SYSTEM32\\cmd.exe", " /c dir");
    system(@args);
    0
    1. MrCanard Messages postés 22 Statut Membre 1
       
      Merci il y avait juste une petite erreur :

      #!/usr/bin/perl -w

      use strict;

      my @args = ("C:\\WINDOWS\\SYSTEM32\\cmd.exe", " /c dir ");
      system(@args);

      print "Repertoire courant : ".@args;

      et là ca marche par contre juste une dernière question :

      il m'affiche donc ce qu'un dir affiche et dans mon print, il me met comme résultat :
      Repertoire courant : 2
      soit @args = 2, pourquoi ???

      Merci de ton aide dubcek ;)

      MrCanard
      -1
      1. MrCanard Messages postés 22 Statut Membre 1 > MrCanard Messages postés 22 Statut Membre
         
        Et est ce que tu saurais comment faire pour ouvrir un dossier grâce à ça, je m'explique :

        opendir DIR, my @args2 = ("C:\\WINDOWS\\SYSTEM32\\cmd.exe", " /c cd ");
        print "Voici la liste :\n";
        while ($filename = readdir(DIR)) {
        if ($filename =~ m/.sch$/) {
        print "\t".$filename."\n";
        }
        }
        closedir DIR;

        Faire un truc comme ça quoi, bon c'est plus dir mais cd pour pouvoir obtenir le repertoire courant, mais il me dit là :

        " readdir() attempted on invalid dirhandle DIR "
        0
      2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660 > MrCanard Messages postés 22 Statut Membre
         
        args contient 2 éléments mais pas le résultat de l'exécution system
        -1
      3. MrCanard Messages postés 22 Statut Membre 1 > dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Comment je peux faire alors pour récupérer cette valeur du "cd" ??
        -1
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    et avec system("C:\WINDOWS\SYSTEM32\cmd.exe /c dir");
    -1
    1. MrCanard Messages postés 22 Statut Membre 1
       
      Avec :

      #!/usr/bin/perl -w

      use strict;

      my $rep = system("C:/WINDOWS/SYSTEM32/cmd.exe /c dir");

      print "Repertoire courant : ".$rep;

      J'obtiens une nouvelle erreur ^^ mais qui m'a l'air moins grave :

      "La syntaxe de la commande est incorrecte."

      Parce que quand je mets des "\" ça me mets : "Unrecognized escape \W passed through" et pareil pour "\S"
      -1