Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1789 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  moi po comprendre.... pb redirection comande DOS....

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

moi po comprendre.... pb redirection comande DOS....

n°191905
thorra
Posté le 08-08-2002 à 10:17:04  profilanswer
 

j'ai comme code ceci:
 
open (COM, 'dir c:\\temp |';);
@lignes=<COM>;
print "lignes=$#lignes\n";
close COM;
 
normalement il devrait mettre le résultat dans COM, mais..
il me l'affiche à l'ecran...
je suis sous WinME.... expliqué moi, moi je comprend pas....

mood
Publicité
Posté le 08-08-2002 à 10:17:04  profilanswer
 

n°191983
Aricoh
gentil mais fo po pousser
Posté le 08-08-2002 à 12:25:57  profilanswer
 

j'ai pas tout compris dans ton code, que cherche-tu exactement à récupérer ?


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO -> Google Pixel 9 PRO XL
n°192026
thorra
Posté le 08-08-2002 à 13:36:44  profilanswer
 

je cherche a recuperer le contenu d'un repertoire à travers la commande "dir"....

n°192033
Aricoh
gentil mais fo po pousser
Posté le 08-08-2002 à 13:50:45  profilanswer
 

essaie ceci alors :
 

Code :
  1. @_ = <*>;


 
Par le biais de cette malheureuse ligne, tu récupères dans ton @_ ce que contient le répertoire courant (celui où le programme perl se trouve).
 
Attention, tu récupère aussi bien les fichiers que les répertoires !


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO -> Google Pixel 9 PRO XL
n°192036
Aricoh
gentil mais fo po pousser
Posté le 08-08-2002 à 13:55:36  profilanswer
 

la réponse que je viens de donner ne fait que récupérer les noms des fichiers ou de répertoires du répertoire que tu scannes
 
si tu veux réellement récupérer ce que fait un dir sous dos, tu peux utiliser ces 2 trucs ci-dessous :
 
Ou bien :

Code :
  1. system ("dir c:\temp >toto.log" );


ça renverra ce que retourne le dir dans un fichier toto.log
 
Ou bien :

Code :
  1. $dir = `dir c:\temp`;
  2. print $dir;


ici, c'est dans la variable $dir que tu récupère la totalité de ce que te renvoies le dir. L'apostrophe utilisée ` est celle obtenue avec AltGr + 7


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO -> Google Pixel 9 PRO XL
n°192037
thorra
Posté le 08-08-2002 à 14:07:22  profilanswer
 

le dernier code que tu ma donné ma l'air fort sympatique..  
le prob c'est que ca donne le meme résultat que les autres..  
au lieu de rediriger la commande vers la variable, il me l'affiche sur l'ecran (si je me souvien bien, celui-ci est la sortie standard)...
il y a pas possibilité de modifier la sortie standard.au lieu que ce soit l'ecran , on la change par une variable ??

n°192040
Aricoh
gentil mais fo po pousser
Posté le 08-08-2002 à 14:13:20  profilanswer
 

thorra a écrit a écrit :

le dernier code que tu ma donné ma l'air fort sympatique..  
le prob c'est que ca donne le meme résultat que les autres..  
au lieu de rediriger la commande vers la variable, il me l'affiche sur l'ecran (si je me souvien bien, celui-ci est la sortie standard)...
il y a pas possibilité de modifier la sortie standard.au lieu que ce soit l'ecran , on la change par une variable ??
 



tu as essayé ce code là ?

Code :
  1. $dir = `dir c:\temp`;
  2.   print $dir;


et tu me dis que ça t'affiche le résultat du dir à l'écran ? Si oui, c normal, vire le print de mon code [:xtc]
 
Logiquement, le fait de faire $dir = `dir c:\temp` indique à perl de faire un appel à la commande dir de MsDos, et d'en rediriger la sortie standard (STDOUT pour Perl) dans la variable $dir. Il faut bien faire gaffe à utiliser l'anticote ` (altgr + 7) au lieu de ' (alt + 4)
 
sinon, vois si Perl ne t'indiquerai pas de message d'erreur au lancement du programme : ouvre une fenêtre MsDos et tape :
 
perl -c -w programme.pl
 


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO -> Google Pixel 9 PRO XL
n°192051
thorra
Posté le 08-08-2002 à 14:25:34  profilanswer
 

j 'ai bien utiliser l'anticote et virer le print... et pourtant STDOUT n'est pas redirigé.....  
j 'ai essayer avec les paramètres -c et -w ,cela m'affiche ca :
 
name "main::dir" used only once : possible typo at programe.pl line 38.
programme.pl syntax ok
 
pourais tu m'expliker ce ke ve dire tout ca ??? please..

n°192056
Aricoh
gentil mais fo po pousser
Posté le 08-08-2002 à 14:29:19  profilanswer
 

thorra a écrit a écrit :

j 'ai bien utiliser l'anticote et virer le print... et pourtant STDOUT n'est pas redirigé.....  
j 'ai essayer avec les paramètres -c et -w ,cela m'affiche ca :
 
name "main::dir" used only once : possible typo at programe.pl line 38.
programme.pl syntax ok
 
pourais tu m'expliker ce ke ve dire tout ca ??? please..



mmmm, le warning retourné par Perl ne me parle pas des masses
 
pourrais-tu STP balancer ton source ici STP ? Quelle est cette ligne 38 ? Et attention, c'est souvent que Perl t'indique une erreur à la ligne n, et que l'erreur se planque vicieusement dans la ligne n-1 ou encore + haut
 
désolé mais là, il me faudrait + d'éléments pour me pencher sur ton blème


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO -> Google Pixel 9 PRO XL
n°192063
thorra
Posté le 08-08-2002 à 14:37:32  profilanswer
 

voici mon code...
la plupart des lignes sont comentées... je fais pour l'instant des tests.. ;-)
 
 
#!c:\perl
use File::Spec;
use File::Copy;
use FileHandle;
 
#$fh=new FileHandle;
#$fh->open('dir /B c:\temp\ |','<';);
#@lignes=$fh->getlines;
#$fh->close;
#print "nblignes=$#lignes\n";
 
#($volume,$dir,$fich) = File::Spec->splitpath( "c:\\temp\\" );
#$cmd="aze";
#print "$cmd\n";
#open (CMD, 'dir /B '.$volume.$dir.$fich.' |';);
#open (Dir, 'dir /B c:\temp\*.txt |';);
#@lignes=<COM>;
#print "ligne=$lignes\n";
#print "lignes=$#lignes\n";
#for($i=0;$i<$#lignes;$i++) {
 #$ret = copy($volume.$dir.$fich,"c:\\ftp\\".$ligne);
     
 #if($ret == 1){
  #        print "success2!!\n";
 #}else{
  #        print "probleme2...\n";
 #}
#}
 
#while ($ligne = <Dir> ) {    
# chomp($ligne);
# print "ligne=$ligne";
#}
 
#close Dir;
 
 
$dir = `dir /B c:\\temp\\`;

mood
Publicité
Posté le 08-08-2002 à 14:37:32  profilanswer
 

n°192068
Aricoh
gentil mais fo po pousser
Posté le 08-08-2002 à 14:42:31  profilanswer
 

je viens de tester toutes les lignes non commentées, le script fonctionne sous 2000
 
perl n'indique aucun warning à la compilation
 
je pense que ça doit être le /B dans ta commande dir, peut être que ME n'aime pas trop ça ?


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO -> Google Pixel 9 PRO XL
n°192070
Aricoh
gentil mais fo po pousser
Posté le 08-08-2002 à 14:43:23  profilanswer
 

voici ta portion de code testée et qui marche sous 2000 :
 

Code :
  1. use File::Spec;
  2. use File::Copy;
  3. use FileHandle;
  4. $dir = `dir /B c:\\temp\\`;
  5. print $dir;


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO -> Google Pixel 9 PRO XL
n°192074
Aricoh
gentil mais fo po pousser
Posté le 08-08-2002 à 14:46:33  profilanswer
 

mais tu n'as pas répondu à la question suivante :
 
que veux-tu récupérer exactement ?
 
juste les noms de fichiers et/ou de répertoires ?
 
si oui, j'aurai un meilleur code pour celà ...


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO -> Google Pixel 9 PRO XL
n°192098
Aricoh
gentil mais fo po pousser
Posté le 08-08-2002 à 15:02:54  profilanswer
 

j'ai oublié 2 trucs :
 
le warning de Perl :

Code :
  1. name "main::dir" used only once : possible typo at programe.pl line 38.


 
Perl te signale ici que tu as ouvert un handle (canal) Dir sans t'en servir dans le code. Et effectivement, tu fais pas de print, ni de scan du handle. C'est rien, ça.
 
Par contre, par convention les noms de handle en Perl s'écrivent toujours en majuscule. Donc, Dir devrait être DIR dans le code.


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO -> Google Pixel 9 PRO XL
n°192126
thorra
Posté le 08-08-2002 à 15:47:56  profilanswer
 

merci beaucoup pour ton aide..
en ce qui concerne la convention, j'ai utilisé du code que j'avais écris dan mes débuts.. dsl ;p
 
en ce qui concerne ce que je veux recuperer, je veux avoir la liste des fichiers et repertoire, le '/B' permet d'avoir le strict minimum pour l'affichage, juste le nom du fichier ou repertoire.. c'est un parametre de la comande DIR.

n°192128
Aricoh
gentil mais fo po pousser
Posté le 08-08-2002 à 15:50:23  profilanswer
 

thorra a écrit a écrit :

merci beaucoup pour ton aide..
en ce qui concerne la convention, j'ai utilisé du code que j'avais écris dan mes débuts.. dsl ;p
 
en ce qui concerne ce que je veux recuperer, je veux avoir la liste des fichiers et repertoire, le '/B' permet d'avoir le strict minimum pour l'affichage, juste le nom du fichier ou repertoire.. c'est un parametre de la comande DIR.



ok, donc autant passer par une globalisation de ton répertoire
 
et donc, le coup du @_ = <*> serait plus rapide qu'un appel à la commande dos dir
 
dans @_, tu récupères les noms (et rien que les noms) des fichiers et rép contenus dans le rép que tu globalise, et il te suffit de tester que chaque nom corresponde à un fichier pour isoler tes fichiers des rép


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO -> Google Pixel 9 PRO XL
n°192156
thorra
Posté le 08-08-2002 à 16:21:30  profilanswer
 

ok, ceci fonctionne pour le repertorie courant, mais si je veux utiliser un repertoire perso ?? comment fais-je ?

n°192157
thorra
Posté le 08-08-2002 à 16:22:26  profilanswer
 

oups scuse.. je veux dire un repertoire autre que que le repertoire courant

n°193838
thorra
Posté le 12-08-2002 à 09:30:49  profilanswer
 

tu avais fais comment pour sauvegarder un repertoire entier ( fichier + sous rep ) ?

n°194608
Aricoh
gentil mais fo po pousser
Posté le 13-08-2002 à 13:55:58  profilanswer
 

thorra a écrit a écrit :

tu avais fais comment pour sauvegarder un repertoire entier ( fichier + sous rep ) ?




 
ben en fait, il faut que tu scannes l'intégralité du répertoire. Pour chaque élément que tu auras récupéré, il faut que tu testes s'il s'agit d'un répertoire ou d'un fichier.
 
Pour chaque répertoire trouvé, tu peux ensuite naviguer dans ce répertoire et refaire la procédure précédente (scan du répertoire).
 
En récupérant les chemins des répertoires, tu peux au final recréer l'arborescence du répertoire initial dans un autre répertoire, créer dedans les répertoires trouvés et y recopier tous les fichiers.


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO -> Google Pixel 9 PRO XL
n°220017
circeedeva​lette
Posté le 25-09-2002 à 15:26:55  profilanswer
 

thorra a écrit a écrit :

ok, ceci fonctionne pour le repertorie courant, mais si je veux utiliser un repertoire perso ?? comment fais-je ?




 
les commandes equivalentes en perl sont opendir, readdir et closedir
un exemple :
 

Citation :


  opendir(DIRHANDLE,"$rep_travail" )||die "ERROR: impossible de lire le répertoire courant\n";
  foreach (readdir(DIRHANDLE))
  {
    if ($_ =~ /\.dc/)
    {
       #print "Effacement de : ".$_."\n";
       unlink $_ ;      
    }
  }
  closedir DIRHANDLE;

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  moi po comprendre.... pb redirection comande DOS....

 

Sujets relatifs
Comment faire une REDIRECTION auto au bout de x secondes ? [solutioné]Commande MS-DOS
pb fermeture session.. help!!!!! moi pa comprendre....Comment créer un lien ou une redirection vers une page asp...
[MS-DOS] Créer un dossier avec la date du jourDans une batch DOS, comment fonctionne les variables???
Comment faire un espace avec le langage DOS ???[HTML, JS] Redirection ? IE 5.0 et IE 5.5
[PHP] Concaténation difficile à comprendre[DOS] besoin d'aide sur la signification d'une ligne d'un batch.
Plus de sujets relatifs à : moi po comprendre.... pb redirection comande DOS....


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR