Ошибка приложения: невозможно сделать {псевдоним "G-DRIVE: video:", "2005:"} в целое число типа - PullRequest
0 голосов
/ 20 октября 2019

Я пишу AppleScript для обработки некоторых файлов MTS. Скрипт рекурсивно просматривает подпапки папки верхнего уровня «Объемы: G-Drive: видео». Подпапки расположены в годичных папках, начиная с папки с именем «2005» для 2005 года. Ошибка времени выполнения возникает с самой первой папкой «2005», которую пытается выполнить сценарий. Я подозревал, что это как-то связано с тем, как я работаю с псевдонимами и текстом, но сейчас я озадачен тем, как это исправить. Ошибка во время выполнения такова: невозможно преобразовать {псевдоним "G-DRIVE: video:", "2005:"} в тип integer.

Я не знаю, где в моем коде появляется целочисленный типв игру, чтобы получить эту ошибку. Редактор сценариев не указывает на местоположение ошибки времени выполнения в коде, поэтому я не знаю, как определить, какая строка вызывает это.

set folderName to "Volumes:G-Drive:video" as alias

my processFolder("", folderName)

on processFolder(root, folderNameToProcess)
    tell application "Finder"
        set theItems to every file of folder (root & folderNameToProcess)
        repeat with theFile in theItems
            set Nm to name of theFile as text
            set Ex to name extension of theFile
            if Nm does not contain "-c" and Ex is "MTS" then
                set NmMinusExt to my remove_extension(Nm)
                set logMsg to "Deleting " & Nm
                my logThis(logMsg)
                tell application "Finder" to delete theFile
            end if
        end repeat
        set theItems to every file of folder (root & folderNameToProcess)
        repeat with theFile in theItems
            set Nm to name of theFile as text
            set Ex to name extension of theFile
            --tell (info for theFile) to set {Nm, Ex} to {name, name extension}
            if Nm contains "-c" and Ex is "MTS" then
                set NmMinusExt to my remove_extension(Nm)
                set shortNm to my remove_lastTwoCharacters(NmMinusExt)
                set name of theFile to shortNm & ".MTS" as text
                set logMsg to "Renaming " & Nm
                my logThis(logMsg)
                --set lastTwoLetters to characters (((length of Nm) - 2) as number) thru (((length of Nm) - 0) as number) of (Nm as text)
                --if lastTwoLetters is "-c" then
                --display notification lastTwoLetters
                --end if
            end if
        end repeat
        set theFolders to name of folders of folder (root & folderNameToProcess)
        repeat with theFolder in theFolders
            copy theFolder as string to TheFolderName
            display notification "found folder named: " & TheFolderName
            set firstChar to (text 1 thru 1 of TheFolderName)
            if firstChar is not "." then
                --display dialog (folderNameToProcess & TheFolderName & ":")
                try
                    my processFolder(folderNameToProcess, TheFolderName & ":")
                on error errStr number errorNumber
                    display dialog errStr
                end try
            end if
        end repeat
    end tell
    return
end processFolder

on remove_extension(this_name)
    if this_name contains "." then
        set this_name to ¬
            (the reverse of every character of this_name) as string
        set x to the offset of "." in this_name
        set this_name to (text (x + 1) thru -1 of this_name)
        set this_name to (the reverse of every character of this_name) as string
    end if
    return this_name
end remove_extension

on remove_lastTwoCharacters(this_name)
    set this_name to ¬
        (the reverse of every character of this_name) as string
    set this_name to (text 3 thru -1 of this_name)
    set this_name to (the reverse of every character of this_name) as string
    return this_name
end remove_lastTwoCharacters

Панель событий редактора сценариевпроизводит следующий след:

tell application "Finder"
    get every file of folder "G-DRIVE:video:"
    get every file of folder "G-DRIVE:video:"
    get name of every folder of folder "G-DRIVE:video:"
    display notification "found folder named: 2005"
end tell
tell application "Script Editor"
    display notification "found folder named: 2005"
end tell
tell application "Finder"
    get every file of folder {alias "G-DRIVE:video:", "2005:"}
    display dialog "Finder got an error: Can’t make {alias \"G-DRIVE:video:\", \"2005:\"} into type integer."

1 Ответ

0 голосов
/ 20 октября 2019

folderName - псевдоним. При попытке объединить псевдоним и строку создается список, на который указывает ошибка.

Решение состоит в том, чтобы использовать только (HFS) строковые пути.

Заменить

set folderName to "Volumes:G-Drive:video" as alias

with

set folderName to "G-Drive:video:"

Завершающая двоеточие крайне важно для возможности добавления компонентов пути

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...