0

私は自分がやりたいことをする Applescript を書きました。あれは:

ファイル名に基づいて、移動元フォルダーから移動先フォルダー内のサブフォルダーのサブフォルダーにファイルを移動します。

ただし、私の問題は、スクリプトにエラー処理がないことです。

例: ファイル「130299_1833_9_Actierondje Cantomobili Figo 400mm_LR.jpg」は、保存先フォルダーのサブフォルダー「0001833」のサブフォルダー「00009」に配置されます

ただし、ファイル名の 2 番目と 3 番目の部分が実際に数値/整数であるかどうかをスクリプトで確認したいと思います。それらが数値/整数でない場合、ファイルはエラー フォルダーに移動され、スクリプトはソース フォルダーの次のファイルで続行されます。

例: ファイル「130299_9_Actierondje Cantomobili Figo 400mm_LR.jpg」と「130299_1833_Actierondje Cantomobili Figo 400mm_LR.jpg」がエラー フォルダに配置されます。

現在、次の Applescript があります。

set source_folder to alias "Macintosh HD:Users:Roy:Desktop:_LR JPG's" --as alias
set destination_folder to "Macintosh HD:Users:Roy:Desktop:Produktcommunicatie test" as alias
set org_delimit to text item delimiters of AppleScript

tell application "Finder"

set source_files to files of source_folder

--display a dialog if there are no files to move
if number of source_files is 0 then
    display dialog "There are no files to move" buttons {"OK"} default button 1
end if

repeat with this_file in source_files
    --set the leveranciersnummer en modelnummer
    set text item delimiters of AppleScript to {"_"}
    set mgDocname to name of this_file
    set mgLeveranciersnummer to text -7 thru -1 of ("0000000" & text item 2 of mgDocname)
    set mgModelnummer to text -5 thru -1 of ("00000" & text item 3 of mgDocname)

    --check if the folders already exist in the destination, if not, create the folders
    if (exists folder mgLeveranciersnummer of folder destination_folder) is false then
        make new folder at destination_folder with properties {name:mgLeveranciersnummer}
    end if

    set text item delimiters of AppleScript to org_delimit
    set model_folder to destination_folder & mgLeveranciersnummer as string
    --set model_folder to alias model_folder

    if (exists folder mgModelnummer of folder model_folder) is false then
        make new folder at model_folder with properties {name:mgModelnummer}
    end if

    set final_path to model_folder & ":" & mgModelnummer as string
    move this_file to final_path with replacing
end repeat

--display a dialog if the all the files are moved
display dialog "All the files are moved to " & destination_folder buttons {"Thanks!"} default button 1

end tell
4

2 に答える 2

0

代わりに、次のようなシェル スクリプトを使用できます。

cd ~/Desktop/_LR\ JPG\'s
for f in *; do
  f2=$(cut -d_ -f2 <<< "$f")
  f3=$(cut -d_ -f3 <<< "$f")
  if [[ $f2 =~ ^[0-9]+$ && $f3 =~ ^[0-9]+$ ]]; then
    d=~/Desktop/Produktcommunicatie\ test/$(printf %07d $f2)/$(printf %07d $f3)
  else
    d=~/Desktop/error
  fi
  mkdir -p "$d"
  mv "$f" "$d"
done
于 2013-10-03T18:04:03.087 に答える
0

最初に間違ったファイル名を持つすべてのファイルを処理し、それらのファイルを別のフォルダー (エラー フォルダー) に移動することで、スクリプトを機能させることができました。

ソース フォルダに残されるファイルは、正しいファイル名を持ち、さらに処理される必要があります。

最終的な作業スクリプトは次のとおりです。

エラー処理が追加されたため、かなり長くなりました。サーバー上のフォルダーを操作するように変更しました。

set drive_name to "Communicatie"
set network_drive to "afp://10.1.96.1/" & drive_name
set lr_folder to "__LR JPG's"
set error_folder to "__LR Error Files"

set drive_name_beeldenbank to "beeldenbank$"
set beeldenbank_folder to "Produktcommunicatie"
set beeldenbank_drive to "smb://10.1.11.3/" & drive_name_beeldenbank


set org_delimit to text item delimiters of AppleScript


-- check if al the folders exist, otherwise create them

tell application "Finder"

-------- check the 1st network drive and folder

try
    mount volume network_drive
on error
    display dialog "The network drive" & network_drive & " could not be found or connected" buttons {"Owkee"} default button 1
    error number -128 --cancel the script
end try

set drive_name to "Volumes:" & drive_name as alias

--- check the source folder
if (exists folder lr_folder of folder drive_name) is false then
    make new folder at drive_name with properties {name:lr_folder}
end if

--- check the error folder
if (exists folder error_folder of folder drive_name) is false then
    make new folder at drive_name with properties {name:error_folder}
end if


set source_folder to folder lr_folder of drive_name
set error_folder to folder error_folder of drive_name

-------- check the 2nd network drive and folder

try
    mount volume beeldenbank_drive
on error
    display dialog "The network drive" & beeldenbank_drive & " could not be found or connected" buttons {"Owkee"} default button 1
    error number -128 --cancel the script
end try

set beeldenbank_drive to "Volumes:" & drive_name_beeldenbank as alias

set destination_folder to folder beeldenbank_folder of beeldenbank_drive as alias


end tell


tell application "Finder"

----------- First routine to check for files that are not named correctly

set source_files to files of source_folder

--display a dialog if there are no files to move
if number of source_files is 0 then
    display dialog "There are no files to move" buttons {"OK"} default button 1
    error number -128 --cancel the script
end if


--tell application "Finder"
repeat with this_file in source_files
    --set the leveranciersnummer en modelnummer
    set text item delimiters of AppleScript to {"_"}
    set mgDocname to name of this_file
    try
        set mgLeveranciersnummer to text -7 thru -1 of ("0000000" & text item 2 of mgDocname)
        set mgModelnummer to text -5 thru -1 of ("00000" & text item 3 of mgDocname)
    end try
    try
        set mgCheck to mgLeveranciersnummer as number
    on error
        set label index of this_file to 2
    end try

    try
        set mgCheck to mgModelnummer as number
    on error
        try
            set label index of this_file to 2
        end try
    end try
end repeat
--end tell

move (every file of source_folder whose label index is 2) to error_folder

set source_files to files of source_folder
--display a dialog if there are no files to move
if number of source_files is 0 then
    display dialog "There are no files with correct file names to move" buttons {"OK"} default button 1

    if (count of files in error_folder) is greater than 0 then
        display dialog "the following files are not named correctly:" buttons {"OK, I'll see what I can do about that!"} default button 1
        open error_folder
    end if

    error number -128 --cancel the script
end if

---------------------------- second routine to process the correctly named files

repeat with this_file in source_files
    --set the leveranciersnummer en modelnummer
    set text item delimiters of AppleScript to {"_"}
    set mgDocname to name of this_file
    set mgLeveranciersnummer to text -7 thru -1 of ("0000000" & text item 2 of mgDocname)
    set mgModelnummer to text -5 thru -1 of ("00000" & text item 3 of mgDocname)

    --check if the folders already exist in the destination, if not, create the folders
    if (exists folder mgLeveranciersnummer of folder destination_folder) is false then
        make new folder at destination_folder with properties {name:mgLeveranciersnummer}
    end if

    set text item delimiters of AppleScript to org_delimit
    set model_folder to destination_folder & mgLeveranciersnummer as string
    --set model_folder to alias model_folder

    if (exists folder mgModelnummer of folder model_folder) is false then
        make new folder at model_folder with properties {name:mgModelnummer}
    end if

    set final_path to model_folder & ":" & mgModelnummer as string
    move this_file to final_path with replacing
    delete this_file
end repeat

----- display a dialog if the all the files are moved
display dialog "All the files are moved to¬
 " & destination_folder buttons {"Thanks!"} default button 1


----- open and display the error files in the error folder
if (count of files in error_folder) is greater than 0 then
    display dialog "the following files are not named correctly:" buttons {"OK, I'll see what I can do about that!"} default button 1
    open error_folder
end if

end tell
于 2013-10-04T13:33:29.277 に答える