0

我写了一个 Applescript 来做我想做的事。那是:

根据文件名将文件从源文件夹移动到目标文件夹中子文件夹的子文件夹。

然而,我的问题是脚本中没有错误处理。

示例: 文件“130299_1833_9_Actierondje Cantomobili Figo 400mm_LR.jpg”被放置在目标文件夹中子文件夹“0001833”的子文件夹“00009”中

但是,我希望脚本检查文件名的第二和第三部分是否实际上是数字/整数。如果它们不是数字/整数,则文件将移至错误文件夹,脚本将继续处理源文件夹的下一个文件。

示例: 文件“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

我已经设法通过首先处理所有文件名错误的文件并将这些文件移动到单独的文件夹(错误文件夹)来使脚本正常工作

然后留在源文件夹中的文件应该具有正确的文件名并得到进一步处理。

这是最终的工作脚本:

由于增加了错误处理,它的时间要长得多,我已经对其进行了修改以使用我们服务器上的文件夹。

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 回答
0

您可以改用这样的 shell 脚本:

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 回答