3 votos

Applescript dando error 1728 al comprobar si el archivo existe

Yo estoy tratando de hacer que la compresión de un archivo de vídeo utilizando el Freno de mano más fácil a través de applescript y han estado basando la mayor parte del código de las plantillas que he encontrado.
En este punto en el código, el usuario ha especificado en el archivo de origen y la carpeta de destino.
En lugar de HandBrakeCLI ciegamente sólo sobrescribir un archivo con el mismo nombre en la carpeta de destino, quería Buscador de hacer un cheque y, si un archivo con el mismo ya existe en la carpeta de destino, entonces yo quería tener el nombre de archivo que se anexa con la fecha y hora actuales antes de la extensión.
Todo funcionaba bien hasta que empecé a añadir el "si existe" el código.

He aquí el fragmento de código:

tell application "Finder"
    set newFilepathPOSIX to POSIX path of dest_folder
    set newFilepathPOSIX to newFilepathPOSIX & "video.mp4"
    -- Check if file with same name exists
    if exists file newFilepathPOSIX then
        display dialog "There is already a file named \"video.mp4\". Do you want to replace the file?" buttons {"Quit", "No", "Yes"} cancel button 1
        if result = {button returned:"No"} then
            set newFilepathPOSIX to POSIX path of dest_folder
            set newFilepathPOSIX to newFilepathPOSIX & "video" & getDateAsString & ".mp4"
        end if
    end if
    set newFilepathPOSIX to quoted form of newFilepathPOSIX
    set shellCommand to "/Volumes/Flash Drive/HandBrakeCLI -i " & origFilepathPOSIX & " -o " & newFilepathPOSIX & " --preset=\"Classic\""
end tell

to getDateAsString from t
    set creationDateString to year of t as string
    set creationDateString to creationDateString & text -2 thru -1 of ("0" & getMonthNum(t) as string)
    set creationDateString to creationDateString & text -2 thru -1 of ("0" & day of t as string)
    set creationDateString to creationDateString & text -2 thru -1 of ("0" & hours of t as string)
    set creationDateString to creationDateString & text -2 thru -1 of ("0" & minutes of t as string)
    set creationDateString to creationDateString & text -2 thru -1 of ("0" & seconds of t as string)
    return creationDateString
end getDateAsString

Esto es lo que devuelve:

exists file "/Users/me/Box Documents/My Folder/video.mp4"
    --> false

Si puedo añadir "como POSIX archivo" a la de "si existe" la línea, esto es lo que devuelve:

get file "/Users/me/Box Documents/My Folder/video.mp4"
    --> error number -1728 from file "/Users/me/Box Documents/My Folder/video.mp4"
exists file "My HD:Users:me:Box Documents:My Folder:video.mp4"
    --> true
display dialog "There is already a file named \"video.mp4\". Do you want to replace the file?" buttons {"Quit", "No", "Yes"} cancel button 1
    --> {button returned:"No"}

Después de esto, se produjo un error.
Totalmente nuevo en esto así que espero que os he dado suficiente detalle sin ceder demasiado detalle.

1voto

adayzdone Puntos 1258

Probar:

set dest_folder to POSIX path of dest_folder
set newFilepathPOSIX to dest_folder & "video.mp4"

tell application "System Events" to exists file newFilepathPOSIX
if the result then
    display dialog "There is already a file named \"video.mp4\". Do you want to replace the file?" buttons {"Quit", "No", "Yes"} cancel button 1
    if button returned of the result = "No" then
        beep
        --Insert your code here
    end if
end if

EDITAR

 set handPath to "/Volumes/Flash Drive/HandBrakeCLI"
set dest_folder to POSIX path of dest_folder
if text -1 of dest_folder ≠ "/" then set dest_folder to dest_folder & "/"
set newFilepathPOSIX to dest_folder & "video.mp4"

tell application "System Events" to exists newFilepathPOSIX
if the result then
    display dialog "There is already a file named \"video.mp4\". Do you want to replace the file?" buttons {"Quit", "No", "Yes"} cancel button 1
    if button returned of the result = "No" then set newFilepathPOSIX to dest_folder & "video" & getDateAsString(current date) & ".mp4"
end if

set shellCommand to quoted form of handPath & " -i " & quoted form of origFilepathPOSIX & " -o " & quoted form of newFilepathPOSIX & " --preset=\"Classic\""
do shell script shellCommand

on getDateAsString(myDate)
    set creationDateString to year of myDate as string
    set creationDateString to creationDateString & text -2 thru -1 of ("0" & (month of myDate as integer) as text)
    set creationDateString to creationDateString & text -2 thru -1 of ("0" & day of myDate as text)
    set creationDateString to creationDateString & text -2 thru -1 of ("0" & hours of myDate as text)
    set creationDateString to creationDateString & text -2 thru -1 of ("0" & minutes of myDate as text)
    set creationDateString to creationDateString & text -2 thru -1 of ("0" & seconds of myDate as text)
end getDateAsString

1voto

Malik hassan Puntos 16

Puede escribir los archivos con la marca de tiempo siempre se incluye. Y usted no necesita todo ese código para hacerlo.

set theDate to do shell script "date +%Y_%m_%d_%H%M%S" -- use the unix  date command to get a formated text date

set newFilepathPOSIX to POSIX path of dest_folder
set newFilepathPOSIX to newFilepathPOSIX & "video_" & theDate & ".mp4"

También sólo poner el código entre decirle a los bloques que debe ser interpretado por un Aplicación dada.

I. e el código de abajo doe no necesita un dígale a bloque.

Ninguno de los siguiente ejemplo de código se encuentra en una dígale a bloque , pero funciona bien.

  set newFilepathPOSIX to "/Users/USERNAME/Movies/CLI/"
    set theDate to do shell script "date +%Y_%m_%d_%H%M%S"
   set the sourceFile to "/Users/USERNAME/Movies/The Studio.m4v"
    set newFilepathPOSIX to newFilepathPOSIX & "video_" & theDate & ".mp4"

   set shellCommand to "/Volumes/HandBrake-0.9.8-MacOSX.6_CLI_x86_64/HandBrakeCLI -i " & quoted form of sourceFile & " -o " & quoted form of newFilepathPOSIX & " --preset=\"Classic\""

    do shell script shellCommand

Colocar código erróneamente entre ellos (como tu haciendo con el buscador) elevará errores inesperados o resultados.

También puede obtener el título de un vídeo si tiene uso de uno de los millones de dólares de comandos

ejemplo: Esto va a buscar el video del primer título. Si no encuentra uno, a continuación, hará uso de "video"

set theDate to do shell script "date +%Y_%m_%d_%H%M%S"
set sourceFile to "/Users/USERNAME/Desktop/Desktop--MOVIES/The Studio2.mov"

set nulmaker to "Video"
set title to (do shell script "mdls   -name  kMDItemTitle -raw -nullMarker" & space & quoted form of nulmaker & space & quoted form of sourceFile) -- get the first title name or if none set to "Video"
set newFilepathPOSIX to newFilepathPOSIX & title & "_" & theDate & ".mp4"



set shellCommand to "/Volumes/HandBrake-0.9.8-MacOSX.6_CLI_x86_64/HandBrakeCLI -i " & quoted form of sourceFile & " -o " & quoted form of newFilepathPOSIX & " --preset=\"Classic\""
do shell script shellCommand

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