2 votes

Impossible de renommer le fichier dans Applescript

Je sens que mes compétences en AppleScript laissent beaucoup à désirer et j'espère apprendre de cet effort.

J'ai du code qui fonctionne et qui traitera un ou plusieurs fichiers déposés sur mon application. Le traitement prend un fichier ".mp4" et, en utilisant VLC, remplace le codec audio par un autre codec pour créer un fichier portant le même nom mais avec un suffixe ".m4v". Le fichier ".mp4" original est ensuite supprimé. Ces étapes fonctionnent bien.

Ensuite, je souhaite renommer le fichier ".m4v" nouvellement créé en ".mp4". Cela échoue lamentablement. J'ai cherché sur Google et lu des articles. Je ne comprends évidemment pas les subtilités de POSIX, alias et file.

Je fournis une version allégée de l'application qui récupère des chemins et crée des noms de fichiers. Elle supprime le fichier ".mp4" mais échoue à renommer le fichier ".m4v".

L'itération actuelle du code échoue avec cette erreur :

Impossible de définir le nom du fichier "Volume de données : The Gilded Age S02 E01.m4v" en "The Gilded Age S02 E01.mp4".

Finder a renvoyé une erreur : Impossible de définir le nom du fichier "Volume de données : The Gilded Age S02 E01.m4v" en "The Gilded Age S02 E01.mp4". (-10006)

Toute suggestion pour me mettre sur la bonne voie serait appréciée.

--##################################################################
--# Exemple de bout de code supposant :
--#  - le fichier "Volume de données : The Gilded Age S02 E01.mp4" existe et est déposé sur cette application
--#  - le fichier "mp4" est traité pour créer le fichier "Volume de données : The Gilded Age S02 E01.m4v"
--#  - le fichier "mp4" est ensuite supprimé
--# - le fichier "m4v" est renommé en "mp4".   CECI ÉCHEOUE
--##################################################################

--############################################
--# ce code traite chaque fichier déposé sur cette application
--############################################
on open theDroppedItems
    repeat with a from 1 to length of theDroppedItems
        set aDroppedItem to item a of theDroppedItems
        display dialog "main(): aDroppedItem = " & aDroppedItem

        set aDroppedItem_FullPath to the POSIX path of aDroppedItem
        display dialog "main(): aDroppedItem_FullPath = " & aDroppedItem_FullPath

        set aDroppedItem_FullPath_NoSfx to remove_file_suffix(aDroppedItem_FullPath)
        display dialog "main(): aDroppedItem_FullPath_NoSfx = " & aDroppedItem_FullPath_NoSfx

        set aDroppedItem_Filename to name of (info for aDroppedItem_FullPath) as string
        display dialog "main(): aDroppedItem_Filename = " & aDroppedItem_Filename

        set aNewFile_FullPath to aDroppedItem_FullPath_NoSfx & ".m4v" as string
        display dialog "main(): aNewFile_FullPath = " & aNewFile_FullPath

        set aNewFile to aNewFile_FullPath as POSIX file
        display dialog "main(): aNewFile = " & aNewFile

        -- supprimer le fichier original "mp4"
        display dialog "main(): delete aDroppedItem = " & aDroppedItem
        tell application "Finder"
            try
                move aDroppedItem to trash
            end try
        end tell

        -- renommer le nouveau fichier "m4v" en "mp4"
        display dialog "main(): rename aNewFile = " & aNewFile
        display dialog "main(): rename aDropped_Filename = " & aDroppedItem_Filename
        tell application "Finder"
            -- cela échoue
            set name of aNewFile to aDroppedItem_Filename
        end tell

    end repeat
end open

--############################################
--# cette sous-routine enlève le suffixe du fichier
--############################################
on remove_file_suffix(theText)
    if length of theText = 0 then
        error "Impossible de supprimer un texte vide." number -1728
    else if length of theText = 1 then
        return ""
    else
        return text 1 thru -5 of theText
    end if
end remove_file_suffix

2voto

red_menace Points 1014

Il semble que Finder ne s'entende pas bien avec la coercition de fichier POSIX, mais en réalité, il ne s'entend pas vraiment bien avec les fichiers POSIX en général. Une solution simple consiste à également convertir le fichier POSIX en alias, par exemple :

set aNewFile to aNewFile_FullPath as POSIX file as alias

Lorsque vous travaillez avec un mélange de chemins POSIX et HFS/APFS, il est généralement plus facile d'utiliser System Events, car il peut gérer les chemins texte pour les deux types. Certaines commandes et propriétés peuvent être légèrement différentes, par exemple l'extension de nom dans System Events est en lecture seule, mais dans l'ensemble, c'est moins capricieux :

on run -- exemple
   open (choose file with multiple selections allowed)
end run

on open droppedItems
   repeat with anItem in droppedItems
      set posixPath to the POSIX path of anItem
      set pathWithoutExt to removeFileExt(posixPath)
      tell application "System Events" to set filename to name of disk item posixPath
      set newFilePath to pathWithoutExt & ".m4v"
      display dialog "original item: " & (anItem as text) & return & return & "
posixPath = " & posixPath & "
pathWithoutExt = " & pathWithoutExt & "
filename = " & filename & "
newFilePath = " & newFilePath with title "Testing "
      display dialog "Delete " & quoted form of posixPath & return & return & "Rename " & quoted form of newFilePath & " to " & quoted form of filename with title "Delete and Rename"
      tell application "System Events"
         move disk item posixPath to trash
         set name of disk item newFilePath to filename
      end tell
   end repeat
end open

on removeFileExt(filePath) -- supprime toute extension de fichier du chemin
   set filePath to filePath as text
   tell application "System Events" to set extension to name extension of disk item filePath
   if extension is "" then return filePath
   return text 1 thru -((count extension) + 2) of filePath
end removeFileExt

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