Apple Script to move files no longer works in Sierra (Help)

It’s not a big deal, we don’t need to use the workflow and I’m guessing it was just set up that way originally by someone with barely more experience than me with applescript and from what I hear he got the workflow elsewhere and just inserted his script. Your pure applescript that you came up with using the starting folder name works fine for us and I tested it successfully on both our machines. Once again though I thank you for your vigilance

Browser: Firefox 50.0

Looking at the script I’m noticing that at a few places strings are used rather than Finder or Alias specifiers.

For example theCourseFolder is just an HFS path.
I’m not sure that it helps but it is better programming habit to write

 move filesToMove to folder theCourseFolder

@myztklkev

Please do not quote always the entire message. Quote only the relevant parts.

Hello Stefan

I was surprised when I saw this instruction in the original code. As I wrote many times, I hate the Finder so I’m not accustomed to its exact behavior. I was ready to edit the instruction but curiosity was too big and I tested. As it is the instruction did its duty so I choose to leave them untouched.
This morning I re-tested :
the code using the name of the folder to move to define the name of the target one.
The same encapsulated in the workflow
the code using the name stored in a text file to define the name of the target one.
All of them behaved flawlessly.
I would be surprised if this antediluvian beast named Finder change its behavior.
I looked again in Finder’s dictionary. Specifier is used several times but is never defined.
It seems that its definition is not really precise.

Move and Duplicate behave well when the target folder is defined by a string. The old beast knows that when it’s asked to execute them the target is necessarily a folder and it behaves accordingly.

Yvan KOENIG running SIerra 10.12.2 in French (VALLAURIS, France) lundi 9 janvier 2017 10:50:38

So I’m running into another problem now, for some reason when we take the click me file and put it in a folder with an nsf and then zip the folder. I can email that file to a mac user and when they open it (which auto-extracts the folder) and run the click me it works, but if I put the file on a download server and the user downloads via a link the click me file will not work until you move it out of the containing folder and put it back in which make absolutely zero sense to me because the zip is the exact same file and downloading it from a link should make no difference unless web browsers handle zips differently.

EDIT: ok, So i discovered that this functions like this no matter what script we use. I tried our original script with the workflow and if you copy it out of the containing folder to say the desktop and then move it back to the containing folder, it runs and moves the files. So something the way the browser handles the zip in Sierra or something breaks something.

I apologizes but I have absolutely no practice of networks and so have no idea of what may fail.
Here is the code in which I added several say instructions.
Save it as an application and make tests with it using the network scheme.
If you listen carefully I hope that you will be able to discover which instruction has an odd behavior.

-- added height say instructions to trace the execution

set pathToApplicationSupport to path to application support from user domain as text # Edited according to StefanK's message
say "Point 1 .-.-.-." & pathToApplicationSupport
display dialog "Point 1 .-.-.-." & pathToApplicationSupport  # ADDED
tell application "Finder"
	--set folderName to "folder name here" as text # DISABLED
	set successFlag to 0
	--set thisFolder to (target of front Finder window) as alias
	--set thisFolder to POSIX path of ((container of (path to me)) as text)
	set thisFolder to ((container of (path to me)) as alias)
	tell me to say "Point 2 .-.-.-." & (thisFolder as text)
	display dialog "Point 2 .-.-.-." & (thisFolder as text)  # ADDED
	set folderName to name of thisFolder # ADDED
	tell me to say "Point 3 .-.-.-." & folderName
	display dialog "Point 3 .-.-.-." & folderName  # ADDED
	set theTargetFolder to (pathToApplicationSupport & "Lotus Notes Data:")
	tell me to say "Point 4 .-.-.-." & theTargetFolder
	display dialog "Point 4 .-.-.-." & theTargetFolder  # ADDED
	set theCourseFolder to (pathToApplicationSupport & "Lotus Notes Data:" & folderName)
	tell me to say "Point 5 .-.-.-." & theCourseFolder
	display dialog "Point 5 .-.-.-." & theCourseFolder  # ADDED
	
	if (exists folder theTargetFolder) is false then
		set theTargetFolder to (pathToApplicationSupport & "IBM Notes Data:")
		tell me to say "Point 6 .-.-.-." & theTargetFolder
		display dialog "Point 6 .-.-.-." & theTargetFolder  # ADDED
		set theCourseFolder to (pathToApplicationSupport & "IBM Notes Data:" & folderName)
		tell me to say "Point 7 .-.-.-." & theCourseFolder
		display dialog "Point 7 .-.-.-." & theCourseFolder  # ADDED
	end if
	
	set filesToMove to (every file of thisFolder whose name extension is "nsf")
	
	if (exists folder theCourseFolder) is false then
		tell me to say "Point 8,  must create the folder : " & folderName
		display dialog "Point 8,  must create the folder : " & folderName  # ADDED
		make new folder at theTargetFolder with properties {name:folderName}
	end if
	
	try
		move filesToMove to theCourseFolder
	on error
		display dialog "File(s) already exist. Do you wish to overwrite?" buttons {"Yes", "No"}
		if the button returned of the result is "Yes" then
			move filesToMove to theCourseFolder with replacing
		else
			set successFlag to 1
		end if
		
	end try
	
	if successFlag = 0 then
		display dialog "File(s) moved successfully." buttons {"OK"}
	else
		display dialog "File(s) not moved." buttons {"OK"}
	end if
	
end tell

Yvan KOENIG running Sierra 10.12.2 in French (VALLAURIS, France) mercredi 11 janvier 2017 21:16:46

Thanks, I’ll give it a try but I feel like it’s an Apple problem at this point. Not sure the say commands will help as the script runs “Successfully” even when it doesn’t move the files. I tested it through firefox and safari and it’s the same, but emailing the exact same zip file directly (not downloading it with a web browser but a mail client) it runs fine. So that says to me that behavior with the way the web browsers download the zips is the problem which sounds weird but that’s what’s happening.

Edit: when it doesn’t move the files it just says Point 3 B, when I copy the click me out of the folder and back in and run it point 3 mentions something about a folder. So seems that’s where it’s failing. No idea how it’s being affected by downloading from a browser though.

I think the explanation might be here: https://eclecticlight.co/2016/06/16/macos-sierra-will-break-many-installers-and-updaters/

You wrote that the script said Point 3 B means that it executed the instruction:
set folderName to name of thisFolder
and that he got “B” as the name of the passed folder.
It means also that the instruction
set theTargetFolder to (pathToApplicationSupport & “Lotus Notes Data:”)
was not executed or failed.

I hoped that you would listen with sufficient care to write what accompanied “Point 1” and “Point 2” so that I may know if the script correctly extracted the values supposed to be stored in the variables pathToApplicationSupport (for Point 1) and thisFolder (for Point 2)

I added 8 instructions supposed to display the text which is said just before.
Please make a test after saving this new version of the script posted in my preceding message.
When one dialog will appear, take a screenshot of this dialog then click the button OK.
Last not least, type in a new message the exact text displayed by each dialog.

Normally you would get something like
“Point 1 .-.-.-.HardDiskName:Users:yourHome:Library:Application Support:”
“Point 2 .-.-.-.the path to the folder containing the script and the nsf files:”
“Point 3 .-.-.-.the name of the folder containing the script and the nsf files”
“Point 4 .-.-.-.HardDiskName:Users:yourHome:Library:Application Support:Lotus Notes Data:”
“Point 5 .-.-.-.HardDiskName:Users:yourHome:Library:Application Support:Lotus Notes Data:” completed by the name of the folder containing the script and the nsf files

For me it’s time to switch off, I will be back tomorrow.

Yvan KOENIG running Sierra 10.12.2 in French (VALLAURIS, France) mercredi 11 janvier 2017 22:38:53

It was saying way to much for me understand it all clearly, let alone to write it down. Point 2 was just a bunch of random numbers and letters it sounded like. I just ran the script under both working and not working conditions and listened for differences. Point 3 was the only one I noticed that sounded different in not working conditions which is why I only mentioned it. I assume 1 and 2 ran correctly as it sounded the same when I ran the script under working conditions

Your explanation about it failing though sounds very similar to that link I posted explaining that gatekeeper is the culprit.

I’ll try your one with prompts tomorrow.

Assuming that the problem is really linked to GateKeeper, here is an alternate scheme.

No need to put an application in the archived folder.
Distribute to your correspondants the script below saved as an application.
When they will receive your zipped folder, they will no longer have to double click it to expand it then double click an enclosed application.
They will just have to drag & drop the archive onto the new application.
This one will expand the archive and move the enclosed nsf files.
As this new scheme doesn’t rely upon an app enclosed in the expanded archive I assume that there will be no problem with GateKeeper.

(*
Save this script as an application.
Drag and drop a zip archive on it.
It will expand the archive then move the enclosed nsf files to their required location.

KOENIG Yvan (VALLAURIS, France)
2016/01/12
*)

on run
	# Entry point used if you double click the application's icon
	my germaine(choose file with prompt "Choose a zip archive" of type "zip")
end run

on open sel
	# Entry point used if you drop a zip file on the application's icon
	set maybe to sel's item 1
	tell application "Finder"
		if name extension of maybe is not "zip" then error "The dropped item must be a zip archive!"
	end tell
	my germaine(maybe)
end open


on germaine(theZip)
	# Get the path to the folder containing the dropped archive
	tell application "Finder"
		set archiveContainer to container of theZip as alias
	end tell
	
	set quotedPOSIXZip to quoted form of POSIX path of theZip
	set quotedPOSIXarchiveContainer to quoted form of POSIX path of archiveContainer
	# Expand the archive in it's own container (Thank's to Shane STANLEY)
	do shell script ("ditto -xk " & quotedPOSIXZip & space & quotedPOSIXarchiveContainer)
	set pathToApplicationSupport to path to application support from user domain as text
	# Build the path of the expanded folder
	set thisFolder to (text 1 thru -5 of (theZip as text)) as alias
	tell application "Finder"
		set successFlag to 0
		set folderName to name of thisFolder
		set theTargetFolder to (pathToApplicationSupport & "Lotus Notes Data:")
		set theCourseFolder to (pathToApplicationSupport & "Lotus Notes Data:" & folderName)
		
		if not (exists folder theTargetFolder) then
			set theTargetFolder to (pathToApplicationSupport & "IBM Notes Data:")
			set theCourseFolder to (pathToApplicationSupport & "IBM Notes Data:" & folderName)
		end if
		
		set filesToMove to (every file of thisFolder whose name extension is "nsf")
		
		if not (exists folder theCourseFolder) then
			make new folder at theTargetFolder with properties {name:folderName}
		end if
		
		try
			move filesToMove to theCourseFolder
		on error
			display dialog "File(s) already exist. Do you wish to overwrite?" buttons {"Yes", "No"}
			if the button returned of the result is "Yes" then
				move filesToMove to theCourseFolder with replacing
			else
				set successFlag to 1
			end if
			
		end try
		
		if successFlag = 0 then
			display dialog "File(s) moved successfully." buttons {"OK"}
		else
			display dialog "File(s) not moved." buttons {"OK"}
		end if
	end tell
end germaine

Here is an alternate version. I wrote it because, as I have no practice of networks I’m not sure that the ditto instruction would behave correctly.
With this version, the archive is expanded in the temporary folder which is on the local machine so I know that the process works.

(*
Save this script as an application.
Drag and drop a zip archive on it.
It will expand the archive then move the enclosed nsf files to their required location.

KOENIG Yvan (VALLAURIS, France)
2016/01/12
*)

on run
	# Entry point used if you double click the application's icon
	my germaine(choose file with prompt "Choose a zip archive" of type "zip")
end run

on open sel
	# Entry point use if you drop a zip file on the application's icon
	set maybe to sel's item 1
	tell application "Finder"
		if name extension of maybe is not "zip" then error "The dropped item must be a zip archive!"
	end tell
	my germaine(maybe)
end open


on germaine(theZip)
	tell application "Finder"
		set archiveName to name of theZip
	end tell
	
	set quotedPOSIXZip to quoted form of POSIX path of theZip
	# Set the path to the folder containing the dropped archive
	set path2Temp to path to temporary items as text # this path ends with a colon
	set quotedPOSIXarchiveContainer to quoted form of POSIX path of path2Temp
	# Expand the archive in the temporary items folder (Thank's to Shane STANLEY)
	do shell script ("ditto -xk " & quotedPOSIXZip & space & quotedPOSIXarchiveContainer)
	# Build the path of the expanded folder
	set folderName to text 1 thru -5 of archiveName # archive name deprieved of the name extension
	set thisFolder to (path2Temp & folderName) as alias

	set pathToApplicationSupport to path to application support from user domain as text # this path ends with a colon
	tell application "Finder"
		set successFlag to 0
		set theTargetFolder to (pathToApplicationSupport & "Lotus Notes Data:")
		set theCourseFolder to (pathToApplicationSupport & "Lotus Notes Data:" & folderName)
		
		if not (exists folder theTargetFolder) then
			set theTargetFolder to (pathToApplicationSupport & "IBM Notes Data:")
			set theCourseFolder to (pathToApplicationSupport & "IBM Notes Data:" & folderName)
		end if
		
		set filesToMove to (every file of thisFolder whose name extension is "nsf")
		
		if not (exists folder theCourseFolder) then
			make new folder at theTargetFolder with properties {name:folderName}
		end if
		
		try
			move filesToMove to theCourseFolder
		on error
			display dialog "File(s) already exist. Do you wish to overwrite?" buttons {"Yes", "No"}
			if the button returned of the result is "Yes" then
				move filesToMove to theCourseFolder with replacing
			else
				set successFlag to 1
			end if
			
		end try
		
		if successFlag = 0 then
			display dialog "File(s) moved successfully." buttons {"OK"}
		else
			display dialog "File(s) not moved." buttons {"OK"}
		end if
	end tell
end germaine

Yvan KOENIG running Sierra 10.12.2 in French (VALLAURIS, France) jeudi 12 janvier 2017 15:20:06