0 votos

No se puede cambiar el nombre de las imágenes secuencialmente a través de Applescript porque otras imágenes ya tienen ese nombre

Estoy intentando automatizar el renombramiento por lotes de imágenes de forma secuencial mediante un simple Applescript. Pero estoy teniendo dificultades para decirle al script que hay imágenes en la misma carpeta que ya tienen el mismo nombre.

Por ejemplo, tengo tres imágenes de un gato que se llaman Hola Mundo 1 , Hola Mundo 2 y Hola Mundo 3 .

En la misma carpeta tengo también tres más de la misma imagen pero con el nombre de Imagen de prueba 1, Imagen de prueba 2 e Imagen de prueba 3.

enter image description here

Quiero cambiar el nombre de todas las "Imágenes de prueba" a Hola Mundo 4 , Hola Mundo 5 y Hola Mundo 6 pero me sale el siguiente error:

error "El buscador obtuvo un error: La operación no puede completarse porque ya existe un elemento con ese nombre". número -48

¿Cómo le digo al script que hay otras imágenes en esta carpeta que tienen el mismo nombre y que tiene que empezar por "Hello World 4" y seguir renombrando el resto de las imágenes?

Tenga en cuenta que voy a usar esto como un script incrustado en una aplicación llamada Hazel (noodlesoft.com) y no acepta manejadores. Así que voy a necesitar una solución que no utiliza un controlador.

Aquí está el script que estoy utilizando y que me da el error cuando intento renombrar las "Imágenes de prueba":

tell application "Finder"
    set all_files to every item of (choose file with prompt "Choose the Files you'd like to rename:" with multiple selections allowed) as list
    set new_name to "Hello World"
    repeat with index from 1 to the count of all_files
        set this_file to item index of all_files
        set {itemName, itemExtension} to {name, name extension} of this_file
        set index_prefix to " "
        if itemExtension is "" then
            set file_extension to ""
        else
            set file_extension to "." & itemExtension
        end if
        set the name of this_file to new_name & index_prefix & index & file_extension as string
    end repeat
end tell

0voto

red_menace Puntos 111

El problema principal es similar al de su otro tema - el nuevo nombre + sufijo no se comprueba con lo que ya hay en la carpeta. Mi respuesta a ese tema utilizó un manejador de propósito general para obtener un nuevo nombre, así que sin usar eso, se usa el contenido (despojado) en su lugar:

set all_files to (choose file with prompt "Choose the Files you'd like to rename:" with multiple selections allowed)
set theName to "Hello World " -- includes separator text

tell application "Finder"
    set theFolder to container of first item of all_files -- the base folder
    repeat with this_file in all_files
        set theExtension to name extension of this_file -- keep existing extension
        if theExtension is not "" then set theExtension to "." & theExtension
        if name of this_file does not start with theName then -- don't rename renamed items

            # the "increment suffix number until the name is unique" part
            set counter to 1 -- starting suffix
            set newName to theName & counter & theExtension
            tell (get name of items of theFolder) to repeat while it contains newName -- get new name
                set counter to counter + 1
                set newName to theName & counter & theExtension
            end repeat

            set name of this_file to newName
        end if
    end repeat
end tell

-1voto

Kerry Puntos 100

Una forma sería comprobar la existencia de los archivos antes de intentar el cambio de nombre. Escriba un bucle. Comienza donde estaría tu nombre de archivo de inicio por defecto. Ejecute los nombres hasta encontrar un nombre no tomado.

Es más difícil de lo que debería ser averiguar si un archivo existe o no existe. Esta rutina aunque larga me ha funcionado. Para evitar este manejador, copie el código en su bucle de comprobación.:

-- ------------------------------------------------------  
(*
  ideas from:
  https://stackoverflow.com/questions/3469389/applescript-testing-for-file-existence

 use the alias way.  Others ways ran into trouble eventually. 
*)
on fileExists(theFile) -- (String) as Boolean
    (* "System Events" and "Finder" checking for file existance revealed problems. l*)
    set debugging to false
    if debugging then log "  fileExists: theFile is " & theFile
    try
        set theAlias to theFile as alias
        set theExistance to true
    on error errMsg number n
        if debugging then log "  fileExists: n is " & n
        -- File or folder doesn't exist. 
        if n is not -43 then
            set commonError to "on error the errMsg is " & errMsg & " number is " & n
            if debugging then log "  fileExists: " & commonError
            display dialog commonError giving up after 10
            -- cause grief above.
            error "Failure of alias." number -1
        else
            set theExistance to false
        end if
    end try
    if debugging then log "  fileExists: theExistance is " & theExistance
    return theExistance
end fileExists

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X