0

次の操作を行いたい .zip ファイルのフォルダーがいくつかあります。

  • 含まれているファイルまたはフォルダーを .zip と同じ場所に解凍します。
  • 結果のファイルまたはフォルダーの名前を、.zip ファイルの名前に変更します。
  • .zip ファイルを削除します

.zip ファイルには常に 1 つのファイルまたは 1 つのフォルダーが含まれているため、間違ったフォルダーの名前を変更する心配はありません。

Applescript の経験はほとんどなく、シェル スクリプトの経験はほとんどありません。誰でも助けたり提案したりできますか?

ありがとう!

4

3 に答える 3

0

別のアプローチを次に示します。

set mainFolder to (path to desktop as text) & "My Folder"
tell application "Finder" to set myZips to (every file of folder mainFolder whose name extension is "zip") as alias list
repeat with aZip in myZips
    set zipName to itemName(aZip)
    tell application "System Events"
        set newItem to open aZip
        set newItem's name to zipName
        delay 1
        delete aZip
    end tell
end repeat

on itemName(anItem)
    tell application "System Events" to set {name:fileName, name extension:nameExtension} to anItem
    set baseName to text 1 thru ((get offset of "." & nameExtension in fileName) - 1) of fileName
end itemName
于 2012-11-30T22:22:25.590 に答える
0

ファイルの解凍は、質問の難しい部分ではありません。難しいのは、どのファイル/フォルダーが解凍されているかわからないため、名前の変更です。したがって、ここでの戦略は、解凍前にフォルダー内のすべてのアイテムのリストを取得し、解凍後にフォルダー内のすべてのアイテムの別のリストを取得してから、2 つのリストを比較することです。最初のリストにない 2 番目のリストにあるアイテムは、解凍されたアイテムです...そのため、それらの名前が zip ファイルと同じでない場合は、名前を変更できます。

提案: AppleScript を学習するには、ここにアクセスして、「初心者向けの AppleScript チュートリアル」という名前のチュートリアルを実行してください。それが私が学んだ方法です。それらは簡単に行うことができ、多くのことを学ぶことができます。幸運を。

-- get the folder containing the zip files
set folderOfZips to (choose folder) as text

tell application "Finder"
    -- get the zip files from the chosen folder
    set zipFiles to files of folder folderOfZips whose name extension is "zip"

    repeat with aZip in zipFiles
        -- we use this when renaming the unzipped files
        set zipName to text 1 thru -5 of (get name of aZip)

        -- get a list of all the items in the folder before unzipping
        set origItems to name of items of folder folderOfZips

        -- unzip the item
        my unzipItem(aZip as text, folderOfZips)

        -- get a list of all the items in the folder after unzipping
        set nowItems to name of items of folder folderOfZips

        -- compare the 2 lists of items, before and after unzipping
        repeat with i from 1 to count of nowItems
            set thisItem to item i of nowItems

            -- if thisItem is not in origItems then it means this is one of the unzipped files, so we rename it
            if thisItem is not in origItems then
                set thisItemPath to folderOfZips & thisItem
                set ext to name extension of item thisItemPath
                if ext is "" then
                    set newname to zipName
                else
                    set newname to zipName & "." & ext
                end if
                if newname is not thisItem then
                    try
                        set name of item thisItemPath to newname
                    end try
                end if
            end if
        end repeat
        move aZip to trash
    end repeat
end tell

tell me
    activate
    display dialog "Finished!" buttons {"OK"} default button 1 with icon note
end tell

on unzipItem(zipPath, destinationFolder)
    do shell script "/usr/bin/ditto -xk " & quoted form of POSIX path of zipPath & space & quoted form of POSIX path of destinationFolder
end unzipItem
于 2012-11-30T22:09:23.993 に答える