<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 ??
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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.
kurtz le pirate <kurtzlepirate@free.fr> 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
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.
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
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
... 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
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.
kurtz le pirate <kurtzlepirate@free.fr> 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
……………………………………………
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.
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
Le 11/06/2016 à 18:35, Joseph-B a écrit :
kurtz le pirate <kurtzlepirate@free.fr> 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 ""
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