2 votes

Aide pour faire fonctionner correctement l'instruction conditionnelle à la fin de ce script

Fondamentalement, la fonction de ce script est de convertir un fichier vidéo au format compatible avec Apple TV, puis de supprimer les fichiers originaux une fois la conversion terminée.

Je suis absolument à bout. Pendant les trois dernières heures, j'ai essayé toutes les combinaisons possibles pour que l'instruction conditionnelle à la fin du script fonctionne correctement.

Voici la situation. Je télécharge beaucoup de fichiers vidéo torrent qui se trouvent finalement dans un dossier sur mon disque dur appelé "Terminé". 90% du temps, les vidéos téléchargées se trouvent dans leur propre dossier que nous appellerons "dossier vidéo téléchargé". De temps en temps, je télécharge un fichier vidéo qui n'est pas contenu dans son propre dossier. Cette vidéo téléchargée se trouve donc maintenant dans le dossier "Terminé".

À la fin de ce script, j'essaie de créer l'instruction conditionnelle qui est essentiellement.. Si le fichier téléchargé se trouve dans le dossier "dossier vidéo téléchargé" qui se trouve dans le dossier "Terminé"... alors supprimez le dossier "dossier vidéo téléchargé" (qui contient le fichier vidéo et d'autres fichiers également) <<— cette partie du script fonctionne correctement MAIS... si le fichier vidéo téléchargé n'est pas contenu dans un dossier qui lui est propre et se trouve maintenant dans le dossier "Terminé"... alors supprimez uniquement ce fichier vidéo. <<— cette partie ne fonctionne pas correctement. Peu importe ce que j'essaie, je finis par supprimer mon dossier "Terminé" (qui contient des dizaines d'autres dossiers que je veux laisser intacts)

En note annexe, je suis assez sûr d'avoir ajouté des étapes dans ce script qui n'avaient pas besoin d'être ajoutées. Encore novice dans tout le processus de script LOL

proprieté date de création : (date actuelle) - (minutes * 10)
proprieté chemin d'entrée1: alias "Macintosh HD:Utilisateurs:Smokestack:Documents:Téléchargements Vuze:Terminé:"
proprieté chemin de sortie1: alias "Macintosh HD:Utilisateurs:Smokestack:Musique:iTunes:Support musique iTunes:Vidéos à la maison:"

définir chemin d'entrée en tant que chemin POSIX de chemin d'entrée1
définir chemin de sortie en tant que chemin POSIX de chemin de sortie1
définir l’icône en tant que chemin vers la ressource "Apple_TV_Logo.png"

afficher dialogue "     CONVERTIR UNE VIDÉO POUR APPLE TV" boutons {"Annuler", "Choisir un fichier"} bouton par défaut 2 avec icône l’icône
si le bouton renvoyé du résultat est "Choisir un fichier" alors
    définir leProcessus en tant que choisir le fichier avec invite "Choisir les fichiers vidéo à convertir pour Apple TV" emplacement par défaut chemin d'entrée1
    définir leFichier en tant que le résultat -- définit la variable sur le nom du fichier choisi
    définir leFichier1 en tant que leFichier
    définir supprimerDossierOriginal en tant que leFichier -- utilisé à la fin du script pour supprimer le fichier vidéo original choisi
    dire à l'application "Événements système"
        définir leNom en tant que nom du leProcessus -- obtenir le nom du fichier pour insérer sa valeur dans les lignes suivantes
    terminer dire
    définir cheminDeSortie2 en tant que (chemin de sortie & leNom & ".m4v")
    afficher dialogue "VEUILLEZ ÊTRE PATIENT. CE PROCESSUS POURRAIT PRENDRE JUSQU'À 30 MINUTES POUR SE TERMINER" boutons {"OK"} bouton par défaut 1 avec icône l’icône abandon après 7

    définir leFichier en tant que chemin POSIX du leFichier
    définir leFichier en tant que "-i " & forme citée du leFichier & " -o " & forme citée de chemin de sortie & forme citée du leNom & ".m4v"
    faire script shell "/Applications/HandBrakeCLI -Z \"AppleTV 3\" " & leFichier
sinon
    retourner
terminer si

-- la Commande Suivante... Pour Que Les Vidéos Ajoutées À iTunes Soient Immédiatement Disponibles Sur Apple TV, La Vidéo Doit Être Lue, Pendant Au Moins Une Seconde, D'Abord Dans iTunes

dire à l'application "Finder"
    ouvrir (chaque élément de chemin de sortie1 dont la date de création > date de création)
terminer dire

délai 2

-- la Commande Suivante... Ferme La Fenêtre Vidéo Dans iTunes

dire à l'application "Événements système"
    appui sur "." en utilisant la touche de commande
terminer dire

-- ci-dessous Est Où Je Suis Bloqué

dire à l'application "Finder"
    définir supprimerDossierOriginal en tant que le conteneur de supprimerDossierOriginal
    si supprimerDossierOriginal n'est pas égale à chemin d'entrée1 alors
        supprimer supprimerDossierOriginal -- Cela Supprime Le Fichier Original Et Son Dossier conteneur s'il est situé à l'intérieur de l'alias "Macintosh HD:Utilisateurs:Smokestack:Documents:Téléchargements Vuze:Terminé:"
    sinon
        si leFichier1 est dans chemin d'entrée1 alors -- cela devrait supprimer uniquement le fichier original.. S’il est situé dans l'alias "Macintosh HD:Utilisateurs:Smokestack:Documents:Téléchargements Vuze:Terminé:"
            supprimer leFichier1
        fin si
    fin si
terminer dire

afficher notification "Votre vidéo est maintenant dans le dossier Vidéos à la maison de votre iTunes et est disponible pour être regardée avec Apple TV" avec titre "VOTRE CONVERSION DE VIDÉO EST TERMINÉE" nom du son "submarine"

J'espère que quelqu'un pourra me diriger dans la bonne direction.


MISE À JOUR :

Voici une version du code qui fonctionne parfaitement !! Cela a été tiré du message de @Hurston qui a apporté les modifications à mon code dans sa réponse à mon message

Seules quelques modifications mineures étaient nécessaires.

proprieté date de création : (date actuelle) - (minutes * 10)
proprieté chemin d'entrée1 : (chemin du dossier documents en tant que texte) & "Téléchargements Vuze:Terminé:"
proprieté chemin de sortie1 : (chemin du dossier musique en tant que texte) & "iTunes:Support musique iTunes:Vidéos à la maison:"

définir chemin d'entrée en tant que chemin POSIX de chemin d'entrée1
définir chemin de sortie en tant que chemin POSIX de chemin de sortie1
définir l’icône en tant que chemin vers la ressource "Apple_TV_Logo.png"

afficher dialogue "CONVERTIR VIDÉO POUR APPLE TV" boutons {"Annuler", "Choisir un fichier"} bouton par défaut 2 avec icône l’icône
si le bouton renvoyé du résultat est "Choisir un fichier" alors
    définir leFichier en tant que choisir le fichier avec invite "Choisir les fichiers vidéo à convertir pour Apple TV" emplacement par défaut (chemin d'entrée1 en tant qu'alias)

    dire à l'application "Événements système"
        définir leNom en tant que nom du leFichier
    terminer dire

    définir chemin de sortie2 en tant que (chemin de sortie & leNom & ".m4v")

    afficher dialogue "VEUILLEZ ÊTRE PATIENT. CE PROCESSUS POURRAIT PRENDRE JUSQU'À 30 MINUTES POUR SE TERMINER" boutons {"OK"} bouton par défaut 1 avec icône l’icône abandon après 7
    set posixFile to chemin POSIX du leFichier
    set posixFile to "-i " & forme citée de posixFile & " -o " & forme citée de chemin de sortie2
    faire script shell "/Applications/HandBrakeCLI -Z \"AppleTV 3\" " & posixFile
sinon
    retourner
terminer si

dire à l'application "Finder"
    ouvrir (chaque élément de dossier chemin de sortie1 dont la date de création > date de création)
fin dire

délai 2

dire à l'application "Événements système"
    appui sur "." en utilisant la touche de commande
fin dire

dire à l'application "Finder"
    définir supprimerDossierOriginal en tant que le conteneur du leFichier
    si (supprimerDossierOriginal en tant que texte) n'est pas égal à chemin d'entrée1 alors
        supprimer supprimerDossierOriginal
    sinon
        supprimer leFichier
    fin si
fin dire

afficher notification "Votre vidéo est maintenant dans le dossier Vidéos à la maison de votre iTunes et est disponible pour être regardée avec Apple TV" avec titre "VOTRE CONVERSION DE VIDÉO EST TERMINÉE" nom du son "submarine"

2voto

Karthik Ramachandran Points 4672

En tant que débutant en script, je dirais que c'est un effort assez bon. Je pense que le problème a à voir avec les classes de variables (texte vs alias), et peut-être une confusion causée par des variables redondantes, donc j'ai modifié un peu votre code et ajouté des commentaires en ligne. Je n'ai pas handbreak installé, donc j'ai commenté cette partie, et exécuté le script, et maintenant il supprime correctement soit le dossier contenant (si ce n'est pas votre dossier final) soit le fichier lui-même. Veuillez voir ci-dessous.

property creationDate : (date actuelle) - (minutes * 10)
property inputPath1 : (chemin vers le dossier documents en tant que texte) "Vuze 
Téléchargements:Terminé:" --J'ai utilisé la commande de chemin intégrée au cas où quelque chose dans le chemin change, et défini cela comme texte plutôt qu'un alias, car le texte est plus facile à manipuler. De plus, cela ne compilait pas sur mon système car ce chemin n'existe pas, mais en tant que texte, il compilera.
property outputPath1 : (chemin vers le dossier musique en tant que texte) "iTunes:iTunes Media:Vidéos personnelles:" --pareil que ci-dessus

set inputPath to chemin POSIX de inputPath1
set outputPath to chemin POSIX de outputPath1
set theIcon to chemin vers la ressource "Apple_TV_Logo.png"

afficher dialog "CONVERTIR LA VIDÉO POUR APPLE TV" boutons {"Annuler", "Choisir un fichier"} bouton par défaut 2 avec icône theIcon
si le bouton retourné du résultat est "Choisir un fichier" alors
    set theFile to choisir un fichier avec invite "Choisir les fichiers vidéo à convertir pour Apple TV" emplacement par défaut (inputPath1 en tant qu'alias) --J'ai changé leProcess en theFile, pour plus de simplicité plus tard
    --set theFile to le résultat --Ce qui était leProcess est déjà cet alias, vous l'avez défini à l'étape précédente. Pas besoin de créer une autre variable avec les mêmes données exactes
    --set theFile1 to theFile --C'est la troisième fois que vous avez assigné une variable à la même chose. Inutile.
    --set deleteOriginalFolder to theFile --C'est la quatrième fois... inutile

tell application "Événements système"
    set leNom to nom de theFile
end tell

set outputPath2 to (outputPath & leNom & ".m4v")

afficher dialog "VEUILLEZ ÊTRE PATIENT. CE PROCESSUS PEUT PRENDRE JUSQU'À 30 MINUTES POUR SE TERMINER" boutons {"OK"} bouton par défaut 1 avec icône theIcon abandonnant après 7
set fichierPosix to chemin POSIX de theFile --changé cela de theFile à fichierPosix pour plus de clarté, et au cas où vous auriez besoin de theFile plus tard.
set fichierPosix to "-i " & forme citée de fichierPosix & " -o " & forme citée de outputPath2 --pareil que ci-dessus
faire script shell "/Applications/HandBrakeCLI -Z "AppleTV 3" " & fichierPosix --pareil que ci-dessus 
sinon--la déclaration sinon est inutile, car le bouton "Annuler" renvoie un message "Annulation par l'utilisateur" au script, mais je l'ai laissé
    retourner
fin si

-- La commande suivante... Pour que les vidéos ajoutées à iTunes soient immédiatement disponibles dans Apple Tv, la vidéo doit être lue, même pendant une courte seconde, d'abord dans iTunes

tell application "Finder"
    ouvrir (chaque élément du dossier outputPath1 dont la date de création > creationDate) --ajouté le mot dossier car outputPath1 est maintenant du texte
end tell

retard 2
-- La commande suivante... Ferme la fenêtre vidéo dans iTunes

tell application "Événements système"
    appuie sur "." en utilisant la touche commande enfoncée
end tell

-- Ci-dessous est où je suis bloqué

tell application "Finder"
    set deleteOriginalFolder to le conteneur de theFile --j'ai changé deltedOriginalFolder en theFile
    si (deleteOriginalFolder en tant que texte) n'est pas égal à inputPath1 alors 
--j'ai ajouté "en tant que texte" pour m'assurer que la comparaison fonctionnerait
        supprimer deleteOriginalFolder --Cela supprime le fichier original et son dossier conteneur s'il se trouve dans l'alias "Macintosh HD:Utilisateurs:Smokestack:Documents:Vuze Téléchargements:Terminé:"
    sinon
        --si (theFile en tant que texte) inputPath1 alors -- pas besoin de l'instruction si car vous avez déjà vérifié ci-dessus s'il se trouve dans son propre dossier. il suffit de supprimer le fichier
        supprimer theFile
        --fin si
    fin si
end tell

afficher notification "Votre vidéo est maintenant dans votre dossier vidéos personnelles iTunes et est disponible pour être regardée avec Apple Tv" avec titre "VOTRE CONVERSION VIDÉO EST TERMINÉE" nom du son "sous-marin"

0 votes

J'ai dû ajuster légèrement le code dans votre réponse... Je ne peux pas vous dire à quel point j'apprécie votre aide avec ce script. Définitivement +1 et j'accepte votre publication comme solution à ma question!

0 votes

Je suis toujours en train de comprendre dans quelles situations utiliser ou ne pas utiliser les termes "en tant que chaîne de caractères, en tant que texte, en tant qu'alias, en tant que fichier..." ainsi que d'essayer de comprendre dans quelles situations utiliser ou ne pas utiliser "alias, chemin POSIX, fichier POSIX..." Ces exemples précis sont là où je bloque. Des heures interminables à essayer des affirmations utilisant "en tant qu'alias" puis... Non, cela n'a pas fonctionné, essayons "en tant que texte" ... etc. Jusqu'à ce que je finisse enfin par tomber sur la séquence correcte.

1 votes

Oui, la classe de la variable est délicate. Pour clarification, le texte et la chaîne de caractères sont pratiquement les mêmes. J'aime habituellement faire les chemins de fichiers "comme du texte" pour deux raisons : 1. Si vous le faites en tant qu'alias et que le fichier n'existe pas encore, vous obtiendrez une erreur. 2. Vous pouvez modifier le chemin quand c'est du texte en ajoutant plus de texte (par exemple, monChemin & "fichier.txt"). Cependant, si vous voulez que le Finder l'ouvre, il ne reconnaîtra pas le texte, donc vous pouvez faire 'ouvrir monChemin en tant qu'alias'. Une bonne vérification est d'afficher la classe de la variable, et assurez-vous que c'est ce que vous pensez que c'est... 'afficher la classe de monChemin'

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X