Helfen Sie dabei, die bedingte Anweisung am Ende dieses Skripts abzurufen, damit sie ordnungsgemäß funktioniert


2

Grundsätzlich besteht die Funktion dieses Skripts darin, eine Videodatei in ein Apple TV-kompatibles Format zu konvertieren und die Originaldateien nach Abschluss der Konvertierung zu löschen.

Ich bin absolut am Ende meiner Karriere. In den letzten drei Stunden habe ich jede erdenkliche Kombination ausprobiert, damit die bedingte Anweisung am Ende des Skripts ordnungsgemäß funktioniert.

Hier ist die Situation. Ich lade viele Torrent-Videodateien herunter, die sich letztendlich in einem Ordner auf meiner Festplatte mit dem Namen "Fertig" befinden. In 90% der Fälle befinden sich die heruntergeladenen Videos in einem eigenen Ordner, den wir als "heruntergeladenes Video" -Ordner bezeichnen. Hin und wieder lade ich eine Videodatei herunter, die nicht in einem eigenen Ordner enthalten ist. Das heruntergeladene Video befindet sich nun im Ordner "Fertig".

Am Ende dieses Skripts versuche ich, die bedingte Aussage zu treffen, die im Grunde genommen lautet: Wenn sich die heruntergeladene Datei im Ordner "Video heruntergeladen" befindet, der sich im Ordner "Fertig" befindet, dann löschen Sie den Ordner "Video heruntergeladen" ( welches auch die Videodatei und alle anderen Dateien enthält) << - dieser Teil des Skripts funktioniert korrekt, ABER .. Wenn die heruntergeladene Videodatei nicht in einem eigenen Ordner enthalten ist und jetzt im Ordner "Fertig" enthalten ist ... dann lösche einfach nur diese eine Videodatei. << - dieser Teil funktioniert nicht richtig. Egal, was ich versuche, ich lösche meinen Ordner "Fertig" (der zufällig Dutzende anderer Ordner enthält, die ich unberührt lassen möchte).

Ich bin mir ziemlich sicher, dass ich einige Schritte in diesem Skript hinzugefügt habe, die nicht hinzugefügt werden mussten. Noch neu für den gesamten Scripting-Prozess LOL

property creationDate : (current date) - (minutes * 10)
property inputPath1 : alias "Macintosh HD:Users:Smokestack:Documents:Vuze Downloads:Finished:"
property outputPath1 : alias "Macintosh HD:Users:Smokestack:Music:iTunes:iTunes Media:Home Videos:"


set inputPath to POSIX path of inputPath1
set outputPath to POSIX path of outputPath1
set theIcon to path to resource "Apple_TV_Logo.png"

display dialog "     CONVERT VIDEO FOR APPLE TV" buttons {"Cancel", "Choose File"} default button 2 with icon theIcon
if the button returned of the result is "Choose File" then
    set theProcess to choose file with prompt "Choose Video Files To Convert For Apple TV" default location inputPath1
    set theFile to the result -- sets the variable to the name of the chosen file
    set theFile1 to theFile
    set deleteOriginalFolder to theFile -- used at the end of the script to delete the original video chosen
    tell application "System Events"
        set theName to name of theProcess -- get the name of the file to insert its value in the following lines
    end tell
    set outputPath2 to (outputPath & theName & ".m4v")
    display dialog "PLEASE BE PATIENT.  THIS PROCESS COULD TAKE UP TO 30 MINUTES TO COMPLETE" buttons {"OK"} default button 1 with icon theIcon giving up after 7

    set theFile to POSIX path of theFile
    set theFile to "-i " & quoted form of theFile & " -o " & quoted form of outputPath & quoted form of theName & ".m4v"
    do shell script "/Applications/HandBrakeCLI -Z \"AppleTV 3\" " & theFile
else
    return
end if

-- The Next Command... For Videos Added To iTunes To Be Immediately Available In Apple Tv, The Video Must Be Plyed, For At Least A Brief Second, First In iTunes

tell application "Finder"
    open (every item of outputPath1 whose creation date > creationDate)
end tell

delay 2

-- The Next Command... Closes The Video Window In iTunes

tell application "System Events"
    keystroke "." using command down
end tell

-- Below Is Where I'm Jammed Up

tell application "Finder"
    set deleteOriginalFolder to the container of deleteOriginalFolder
    if deleteOriginalFolder is not equal to inputPath1 then
        delete deleteOriginalFolder -- This Deletes The Original File And It's Containing Folder if it is located inside alias "Macintosh HD:Users:Smokestack:Documents:Vuze Downloads:Finished:"
    else
        if theFile1 is in inputPath1 then -- this is supposed to delete the original file only..  If it's container is  alias "Macintosh HD:Users:Smokestack:Documents:Vuze Downloads:Finished:"
            delete theFile1
        end if
    end if
end tell

display notification "Your Video Is Now In Your iTunes Home Videos Folder And Is Available To Be Watched With Apple Tv" with title "YOUR VIDEO CONVERSION HAS COMPLETED" sound name "submarine"

Ich hoffe, jemand kann mich in die richtige Richtung weisen.


AKTUALISIEREN:

Hier ist eine Version des Codes, die perfekt funktioniert !! Dies wurde aus dem Beitrag von @Hurston übernommen, der die Änderungen an meinem Code in seiner Antwort auf meinen Beitrag bereitgestellt hat

Nur ein paar kleinere Änderungen waren notwendig.

property creationDate : (current date) - (minutes * 10)
property inputPath1 : (path to documents folder as text) & "Vuze Downloads:Finished:"
property outputPath1 : (path to music folder as text) & "iTunes:iTunes Media:Home Videos:"

set inputPath to POSIX path of inputPath1
set outputPath to POSIX path of outputPath1
set theIcon to path to resource "Apple_TV_Logo.png"

display dialog "CONVERT VIDEO FOR APPLE TV" buttons {"Cancel", "Choose File"} default button 2 with icon theIcon
if the button returned of the result is "Choose File" then
    set theFile to choose file with prompt "Choose Video Files To Convert For Apple TV" default location (inputPath1 as alias)

    tell application "System Events"
        set theName to name of theFile
    end tell

    set outputPath2 to (outputPath & theName & ".m4v")

    display dialog "PLEASE BE PATIENT.  THIS PROCESS COULD TAKE UP TO 30 MINUTES TO COMPLETE" buttons {"OK"} default button 1 with icon theIcon giving up after 7
    set posixFile to POSIX path of theFile
    set posixFile to "-i " & quoted form of posixFile & " -o " & quoted form of outputPath2
    do shell script "/Applications/HandBrakeCLI -Z \"AppleTV 3\" " & posixFile
else
    return
end if

tell application "Finder"
    open (every item of folder outputPath1 whose creation date > creationDate)
end tell

delay 2

tell application "System Events"
    keystroke "." using command down
end tell

tell application "Finder"
    set deleteOriginalFolder to the container of theFile
    if (deleteOriginalFolder as text) is not equal to inputPath1 then
        delete deleteOriginalFolder
    else
        delete theFile
    end if
end tell

display notification "Your Video Is Now In Your iTunes Home Videos Folder And Is Available To Be Watched With Apple Tv" with title "YOUR VIDEO CONVERSION HAS COMPLETED" sound name "submarine"

Antworten:


2

Als jemand, der noch keine Erfahrung mit Skripten hat, würde ich sagen, dass dies eine ziemlich gute Anstrengung ist. Ich denke, das Problem hat mit Variablenklassen (Text vs. Alias) zu tun, und vielleicht mit einigem Durcheinander, das durch redundante Variablen verursacht wird. Deshalb habe ich Ihren Code ein wenig überarbeitet und Inline-Kommentare eingefügt. Ich habe Handbreak nicht installiert, also habe ich diesen Teil auskommentiert und das Skript ausgeführt, und jetzt wird entweder der enthaltene Ordner (es ist nicht Ihr fertiger Ordner) oder die Datei selbst korrekt gelöscht. Siehe unten.

property creationDate : (current date) - (minutes * 10)
property inputPath1 : (path to documents folder as text) & "Vuze 
Downloads:Finished:" --I used the built-in path to command in case something in the path changes, and set this to text rather than an alias, because text is easier to manipulate. Also, it wouldn't compile on my system because that path doesn't exist, but as text, it will compile.
property outputPath1 : (path to music folder as text) & "iTunes:iTunes Media:Home Videos:" --same as above

set inputPath to POSIX path of inputPath1
set outputPath to POSIX path of outputPath1
set theIcon to path to resource "Apple_TV_Logo.png"

display dialog "CONVERT VIDEO FOR APPLE TV" buttons {"Cancel", "Choose File"} default button 2 with icon theIcon
if the button returned of the result is "Choose File" then
    set theFile to choose file with prompt "Choose Video Files To Convert For Apple TV" default location (inputPath1 as alias) --I changed theProcess to theFile, for simplicity later on
    --set theFile to the result --What was theProcess is already this alias, you set it in the step above. No need to create another variable with the exact same data
    --set theFile1 to theFile --This is the third time you've assigned a variable to the same thing. Unnecessary.
    --set deleteOriginalFolder to theFile -- This is the fourth time... unnecessary

tell application "System Events"
    set theName to name of theFile
end tell

set outputPath2 to (outputPath & theName & ".m4v")

display dialog "PLEASE BE PATIENT.  THIS PROCESS COULD TAKE UP TO 30 MINUTES TO COMPLETE" buttons {"OK"} default button 1 with icon theIcon giving up after 7
set posixFile to POSIX path of theFile --changed this from theFile to posixFile for clarity, and in case you need theFile later on.
set posixFile to "-i " & quoted form of posixFile & " -o " & quoted form of outputPath2 --same as above
do shell script "/Applications/HandBrakeCLI -Z \"AppleTV 3\" " & posixFile --same as above 
else--else statement is unnecessary, because the "Cancel" button returns a "User Cancelled" message to the script, but I left this
    return
end if

-- The Next Command... For Videos Added To iTunes To Be Immediately Available In Apple Tv, The Video Must Be Plyed, For At Least A Brief Second, First In iTunes

tell application "Finder"
    open (every item of folder outputPath1 whose creation date > creationDate) --added the word folder because outputPath1 is now text
end tell

delay 2
-- The Next Command... Closes The Video Window In iTunes

tell application "System Events"
    keystroke "." using command down
end tell

-- Below Is Where I'm Jammed Up

tell application "Finder"
    set deleteOriginalFolder to the container of theFile --changed deltedOriginalFolder to theFile
    if (deleteOriginalFolder as text) is not equal to inputPath1 then 
--I added the "as text" to make sure the comparison would work
        delete deleteOriginalFolder -- This Deletes The Original File And It's Containing Folder if it is located inside alias "Macintosh HD:Users:Smokestack:Documents:Vuze Downloads:Finished:"
    else
        --if (theFile as text) inputPath1 then -- don't need the if statement because you've already checked above to see if it's in it's own folder. just delete the file
        delete theFile
        --end if
    end if
end tell

display notification "Your Video Is Now In Your iTunes Home Videos Folder And Is Available To Be Watched With Apple Tv" with title "YOUR VIDEO CONVERSION HAS COMPLETED" sound name "submarine"

Ich musste den Code in Ihrer Antwort nur geringfügig anpassen ... Ich kann Ihnen nicht sagen, wie sehr ich Ihre Hilfe bei diesem Skript schätze. Auf jeden Fall +1 und ich akzeptiere Ihren Beitrag als Lösung für meine Frage!
wch1zpink

Ich versuche immer noch, herauszufinden, welche Situationen verwendet werden sollen und oder nicht, um die Begriffe "als Zeichenfolge, als Text, als Alias, als Datei ..." zu verwenden, sowie um herauszufinden, welche Situationen verwendet werden sollen und oder Nicht "Alias", "POSIX-Pfad", "POSIX-Datei" verwenden. In diesen Beispielen bin ich genau dort, wo ich mich verklemme. Unendliche Stunden damit, Anweisungen mit "als Alias" auszuprobieren. Nein, das hat nicht funktioniert. Lassen Sie mich "als Text" ausprobieren ... usw. Bis ich schließlich über die richtige Reihenfolge stolpere.
wch1zpink

1
Ja, die Klasse der Variablen ist schwierig. Zur Verdeutlichung sind Text und Zeichenfolge praktisch identisch. Normalerweise möchte ich Dateipfade aus zwei Gründen "als Text" erstellen: 1. Wenn Sie sie als Alias ​​erstellen und die Datei noch nicht vorhanden ist, wird eine Fehlermeldung angezeigt. 2. Sie können den Pfad als Text ändern, indem Sie weiteren Text hinzufügen (z. B. myPath & "file.txt"). Wenn Sie jedoch möchten, dass der Finder ihn öffnet, erkennt er keinen Text. Sie können also "myPath als Alias ​​öffnen". Eine gute Prüfung ist, die Klasse der Variablen zu protokollieren und sicherzustellen, dass es das ist, was Sie denken, es ist ... 'log class of myPath'
Hurston

Außerdem gibt posix path of myPath den Pfad mit Schrägstrichen zurück. zB /macHD/username/file.txt. POSIX-Datei konvertiert einen Posix-Pfad (mit Schrägstrichen) in einen Standard-HFS-Pfad, z. B. macHD: Benutzername: Datei.txt. Posix-Pfade eignen sich gut für das Terminal, das HFS-Pfade nicht erkennt.
Hurston
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.