AutoIt Français

Nouveau forum : http://www.autoitscript.fr/
 
AccueilFAQRechercherS'enregistrerMembresGroupesConnexionhttp://www.autoitscript.fr

Partagez | 
 

 parce qu il y en a marre des espaces !

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
sylvanie
Modérateur
Modérateur


Nombre de messages : 300
Date d'inscription : 10/03/2007

MessageSujet: parce qu il y en a marre des espaces !   2007-07-05, 22:28

Bonjour tout le monde
J'ai fait déjà pas mal de script utilisant des exe externes (comme openssl), nécessitant des palanquée d'arguments dont des chemins de fichiers.

Et quand il y a des espaces, faut toujours jongler avec les ' " ' pour inclure ces maudits espaces, et à la fin c'est le KO, et on se prends les pieds dans le tapis.

Pour remédier à ceci voilà une fonction convertissant un chemin de fichier un son équivalent vieux DOS aves des ~1, ~2 ...
La conversion est un peu lente à mon goût donc si vous avez un besoins similaire au mien, je vous conseille de tester d'abords si il y a un espace dans le chemin, et si oui, lancer la fonction de conversion.
Pardonnez moi, je n'ai pas commenter le code ...

[code]
#include <Constants.au3>

Func Conv_Dos($name_file_ini)
local $tab_to_analyse
local $oldname=""
local $flux
local $rep=""
local $to_delete=0
If FileExists($name_file_ini) == 0 Then
if Fileopen($name_file_ini,2) == -1 Then
SetError(1)
return ""
EndIf
FileClose($name_file_ini)
$to_delete=1
EndIf
$tab_to_analyse=StringSplit($name_file_ini,"\",1)
$oldname=$tab_to_analyse[1]
$rep=$oldname&'\'
For $indice=2 To $tab_to_analyse[0]
$line=""
If $indice<> $tab_to_analyse[0] Then
$cmd=@ComSpec&' /c dir /A:D /X "'&$tab_to_analyse[$indice]&'*" | find "'&$tab_to_analyse[$indice]&'"'
Else
$cmd=@ComSpec&' /c dir /X "'&$tab_to_analyse[$indice]&'*" | find "'&$tab_to_analyse[$indice]&'"'
EndIf
$flux=Run($cmd,$rep,@SW_HIDE,$STDERR_CHILD + $STDOUT_CHILD)
While 1
If @error Then ExitLoop
$line = $line& StdoutRead($flux)
Wend
If $line=="" Then ContinueLoop
$tabligne=StringSplit($line,@CRLF,1)
$line=StringStripWS($tabligne[1],7)

$line=StringSplit($line," ")
If ($line[0]<4) Then
SetError(1)
return ""
EndIf
$oldname=$line[4]
$rep=$rep&$oldname&"\"
Next
$rep=StringLeft($rep,StringLen($rep)-1)
if ($to_delete==1) Then FileDelete($name_file_ini)
SetError(0)
Return $rep
EndFunc
[/code]
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
ani
Modérateur
Modérateur


Nombre de messages : 563
Date d'inscription : 23/01/2007

MessageSujet: Re: parce qu il y en a marre des espaces !   2007-07-08, 13:09

Encore un beau petit script merci sylvanie
Me reste plus qu'a comprendre

je vais peut etre dire une tite betise si c'est juste pour transformer le chemin en ~1 y a ceux-ci (jamais testé)

$a = FileGetShortName(@HomeDrive & "\Program Files")
msgbox(0,"long file name", $a)

je vais tester le code et essayer de comprendre ^^'
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
sylvanie
Modérateur
Modérateur


Nombre de messages : 300
Date d'inscription : 10/03/2007

MessageSujet: Re: parce qu il y en a marre des espaces !   2007-07-08, 15:00

arrgh !!! touché !
Je n'avais pas fait attention à celle-ci et en effet elle fait exactement la même chose.

Bon je viens d'enrichir ma grande collection de boulletes.

Seule consolation teintée légèrement de mauvaise fois, on peut facilement adapter cette méthode à d'autres langages de script ne proposant pas déjà cette fonction ^^
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: parce qu il y en a marre des espaces !   Aujourd'hui à 16:28

Revenir en haut Aller en bas
 
parce qu il y en a marre des espaces !
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» [Résolu] PC Packard Bell ne démarre plus
» marre de la prog
» Site/Forum Y'en a marre !
» Mon ordinateur Windows Xp redémarre tout seul
» [résolu]Mon pc redémarre tout seul "erreur de windows"

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
AutoIt Français :: AutoIt v3 :: Scripts-
Sauter vers: