5 votes

AppleScript pour renommer les noms de fichiers

Quelqu'un peut-il m'aider à résoudre le problème suivant ? Je voudrais un AppleScript qui renomme des fichiers comme ceux-ci en supprimant les chiffres de tête et le trait de soulignement.

Donc des noms de fichiers comme ceux-ci :

5111632\_The Secret\_ Dare to Dream.mp4
5099299\_Invasion of the Body Snatchers 1.mp4
5099287\_Basic Instinct.mp4
5099283\_Before I Go to Sleep.mp4

se transformerait en :

The Secret\_ Dare to Dream.mp4
Invasion of the Body Snatchers 1.mp4
Basic Instinct.mp4
Before I Go to Sleep.mp4

Je vais l'exécuter dans un seul dossier en utilisant Hazel.

1 votes

On dirait des fichiers vidéo. Savez-vous qu'il existe une méthode très, très répandue - presque standardisée - pour nommer les fichiers vidéo, ainsi que de nombreux logiciels permettant de le faire automatiquement. Les avantages du respect de la convention de nommage sont les suivants : vous vous épargnez le casse-tête de décider de votre propre convention et de la modifier sans cesse ; un système de fichiers organisé grâce à un logiciel qui fait le travail pour vous ; et la possibilité de trouver des films en ligne beaucoup plus facilement car ils suivent tous la même convention de nommage.

2voto

Wowfunhappy Points 6021

La méthode native d'Applescript pour renommer des fichiers est la suivante :

tell application "Finder"
    set theFile to (choose file)
    set name of theFile to "Yay"
end tell

Si vous vouliez renommer tous les fichiers d'un dossier, je mettrais les fichiers dans une liste et j'utiliserais une méthode de renom. Repeat sur chacun d'eux :

tell application "Finder"
    set theFolder to (choose folder)
    set folderContents to every item of theFolder
    repeat with theFile in folderContents
        set name of theFile to "Yay"
    end repeat
end tell

(Ce code ne s'exécutera pas tel quel car vous ne pouvez pas avoir deux fichiers nommés "Yay", mais le premier est renommé, et vous comprenez l'idée).

C'est plus proche de ce que vous voulez faire, mais nous n'en sommes pas encore là : vous voulez obtenir le nom du fichier actuel, y apporter quelques modifications et enregistrer le nouveau nom.

Il y a une sous-routine que j'ai trouvée il y a des années quelque part (je n'arrive pas à trouver la source maintenant) qui récupère tout ce qui se trouve à droite d'un certain caractère, comme un trait de soulignement. Il est ainsi facile de faire exactement ce que vous voulez. Le code complet et final est :

tell application "Finder"
    set theFolder to (choose folder)
    set folderContents to every item of theFolder
    repeat with theFile in folderContents
        set oldName to name of theFile
        set newName to my rightString(oldName, "_")
        set name of theFile to newName
    end repeat
end tell

on rightString(str, del)
    local str, del, oldTIDs
    set oldTIDs to AppleScript's text item delimiters
    try
        set str to str as string
        if str does not contain del then return str
        set AppleScript's text item delimiters to del
        set str to str's text items 2 thru -1 as string
        set AppleScript's text item delimiters to oldTIDs
        return str
    on error eMsg number eNum
        set AppleScript's text item delimiters to oldTIDs
        error "Can't rightString: " & eMsg number eNum
    end try
end rightString

0 votes

Plusieurs fichiers dans le même dossier partageant le même nom. Lorsque j'ai exécuté le script, il n'a pas écrasé le fichier existant, il a juste fait une erreur. C'était correct puisque c'était un script intermédiaire pour l'explication, mais je voulais expliquer que le code ne s'exécutait pas complètement !

0 votes

@CJK Ah, ça m'a échappé ! Je ne voulais pas l'activer parce que si quelqu'un l'exécute dans un dossier avec des données réelles, les données seraient détruites ! Il vaut mieux laisser l'erreur. Le but de ce bloc de code était de faire passer le message ; le dernier jeu de code est le vrai.

1voto

wch1zpink Points 6067

Je ne sais rien à propos d'Hazel. Cependant, le code AppleScript suivant supprimera tout ce qui se trouve à gauche du premier "_" inclus dans les noms des fichiers sélectionnés dans le Finder et renommera les fichiers sélectionnés en conséquence.

tell application "Finder"
    set theFiles to (get selection)
    repeat with i from 1 to count of theFiles
        set thisFile to item i of theFiles
        set thisName to name of thisFile
        set theOffset to my (offset of "_" in thisName)
        set newName to text (theOffset + 1) ¬
            thru -1 of thisName
        set name of thisFile to newName
    end repeat
end tell

0 votes

Vous ne devriez pas nicher un tell current application à l'intérieur d'un bloc tell application "Finder" bloc. Cela dit, c'est assez loufoque que vous ayez explicitement utilisé tell current application . Je pense que vous essayez d'utiliser le offset sans avoir à quitter un bloc du Finder : Je pense que vous cherchez soit le mot my ou continue c'est-à-dire set theOffset to my (offset of ..) ou set theOffset to continue offset of ... (l'utilisation de continue étant le plus préférable).

0 votes

Je viens de remarquer la ligne set newName to characters (theOffset + 1) thru -1 of thisName as string . Comme il n'est pas nécessaire de diviser la chaîne de caractères pour ensuite les concaténer à nouveau - ce qui les soumet à l'épreuve de l'usure text item delimiters que vous n'avez pas défini avant cette opération - il est beaucoup plus conseillé de faire set newName to text (theOffset + 1) thru -1 of thisName . Cela permet de saisir directement la sous-chaîne, sans la division et la jonction intermédiaires, ce qui est plus rapide, mais surtout évite tout problème avec les TIDs dont on ne peut être sûr de la valeur à moins de la définir explicitement.

0 votes

@CJK J'ai l'impression de m'être fait taper sur les doigts avec une règle par mon professeur LOL. Plus sérieusement, je vous remercie pour vos critiques constructives. Je dois admettre que je continue à apprendre de vous.

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