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

AppleScript. Un truc m'échappe...

4 réponses
Avatar
kurtz le pirate
bonjour,

voila un extrait de mon script.


<code>
try
set TheFileList to (choose file with prompt "Ce dialogue vous permet de
choisir plusieurs fichiers perl (.pl) :" of type {"pl"} with multiple
selections allowed)
set lastErrorTxt to ""
repeat with ThisFile in TheFileList
set tmp to POSIX path of (ThisFile)
set posixList to posixList & tmp & return
end repeat
--- la liste posixList est OK ici.

--- selection du nom de l'archive
try
set ArchiveName to (choose file name with prompt "Nom de l'archive à
créer :" default name "Archive.zip")
-- construction de la commande shell
set PosixArchiveName to POSIX path of (ArchiveName)
set ShellCmd to "zip " & PosixArchiveName & " "
repeat with ThisFile in posixList
set ShellCmd to ShellCmd & (ThisFile as string) & " "
end repeat
set ShellResult to do shell script ShellCmd
display dialog ShellResult
end try


on error errText number errNum
...
</code>

Mais AppleScript me montre ces erreurs :


tell current application
do shell script "zip /Users/moi/Desktop/Archive.zip / U s e r s / m o i
/ p e r l / c i s c o . p l
/ U s e r s / m o i / p e r l / c o l o r s . p l
/ U s e r s / m o i / p e r l / d o r t . p l
/ U s e r s / m o i / p e r l / d u m p e r . p l
/ U s e r s / m o i / p e r l / e n v i r o n e m e n t . p l
"
--> error "
zip error: Internal logic error (empty name without -j or -r)" number 5
L'erreur est logique, les chemins des fichiers n'existent pas, mais
pourquoi, les caractères du chemin posix de chaque fichier est séparé
par une espace ??


Je pige pas :( Une idée ?


--
kurtz le pirate
compagnie de la banquise

4 réponses

Avatar
josephb
kurtz le pirate a écrit,
pourquoi, les caractères du chemin posix de chaque fichier est séparé
par une espace ??

Probablement parce qu'il y a une espace dans un élément du chemin ?
Ça pourrait bien être à ce niveau
… PosixArchiveName & " "
Cette dernière espace (est-elle vraiment utile ?) pourrait en être la cause
Dans les commandes shell les espaces sont généralement interprétées comme des séparateurs
d'arguments ou commandes, ça doit embrouiller le compilateur.
Pour éviter ce genre de problème quand il y a une commande shell impiquée, il faut
systématiquement utiliser l'expression
"quoted form of (the_posix_path)"
dans ton cas teste cette ligne modifiée, ça devrait passer
repeat with ThisFile in posixList
set ShellCmd to (quoted form of (ShellCmd & (ThisFile as string) & " "))
end repeat
Si non,
repeat
set tempPath to (PosixArchiveName & " " & (ThisFile as string) & " ")
set ShellCmd to "zip " & quoted form of tempPath
end repeat
Pas testé ton script, mais la solution se trouve là.
Je fais régulièrement appel à des commandes shell impliquant des chemins posix, avec
"quoted form of", et je n'ai jamais ce type de souci.
HTH
--
J. B.
Avatar
kurtz le pirate
Le 10/06/2016 à 19:46, Joseph-B a écrit :
...
Pour éviter ce genre de problème quand il y a une commande shell impiquée, il faut
systématiquement utiliser l'expression
"quoted form of (the_posix_path)"
dans ton cas teste cette ligne modifiée, ça devrait passer

merci pour ta réponse, mais pas mieux avec quoted form... pour le moment
--
kurtz le pirate
compagnie de la banquise
Avatar
josephb
kurtz le pirate a écrit,
merci pour ta réponse, mais pas mieux avec quoted form... pour le moment

Ben non, pas merci, parce que si j'avais testé je ne t'aurais pas répondu / à moitié / à
côté
Le quoted form était effectivement en cause, mais pas que :
tu demandes une liste (posixList)
mais en réalité tu fais faire une chaîne de texte ! C'est ça le plus important de
l'erreur.
Ci-dessous, ton script qui marche chez moi maintenant (j'ai mis du pdf, n'ayant pas de
perl sous la main !)
En test j'ai mis 4 pdf dont deux ont des noms comportant des espaces.
Sans le /quoted form/, ça génère un warning de la commande Shell,
Avec, l'archive est créée sans problème et le shellResult donne le résultat des
compressions…
la sélection totale faisait 5,8 Mo, le zip fait 4,2 Mo
………………………………
set posixList to {}
try
set TheFileList to (choose file with prompt "Ce dialogue vous permet de
choisir plusieurs fichiers texte (.pl) :" of type {"pdf"} with multiple selections
allowed)
set lastErrorTxt to ""
repeat with ThisFile in TheFileList
set tmp to (quoted form of POSIX path of (ThisFile))
copy tmp to the end of posixList
--set posixList to posixList & tmp & return
end repeat
--- la liste posixList est OK ici.
--return posixList --tests
--- selection du nom de l'archive
try
set ArchiveName to (choose file name with prompt "Nom de l'archive à
créer :" default name "Archive.zip")
-- construction de la commande shell
set PosixArchiveName to (quoted form of POSIX path of (ArchiveName))
set ShellCmd to "zip " & PosixArchiveName & " "
--return ShellCmd --tests
repeat with ThisFile in posixList
set ShellCmd to ShellCmd & (ThisFile as string) & " "
end repeat
set ShellResult to do shell script ShellCmd
display dialog ShellResult
end try
on error errText number errNum
end try
……………………………………………
En espérant que ça aille pour toi cette fois ;-)
--
J. B.
Avatar
kurtz le pirate
Le 11/06/2016 à 18:35, Joseph-B a écrit :
kurtz le pirate a écrit,
merci pour ta réponse, mais pas mieux avec quoted form... pour le moment

Ben non, pas merci, parce que si j'avais testé je ne t'aurais pas répondu / à moitié / à
côté
...
En espérant que ça aille pour toi cette fois ;-)

oui, maintenant ça fonctionne.
j'avais aussi trouvé mon problème :
set posixList to {} vs set posixList to ""
;)
--
kurtz le pirate
compagnie de la banquise