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

yeah I figured it out and I appreciate it, but there’s a problem with this. Our old script we could just open the workflow file in notepad++ and edit the folder name and save it, with this way it doesn’t seem like that’s possible and I would have to re-compile the script with a different folder name every time which I don’t think is feasible. Any suggestions?

Your click me.app is an application bundle containing an Automator workflow.
In your test folder, put only my script saved as an application and some nsf files.
Maybe it would be better to save the script as “double click me.app

Yvan KOENIG running Sierra 10.12.2 in French (VALLAURIS, France) vendredi 6 janvier 2017 18:43:43

Yvan, there is even

set pathToApplicationSupport to path to application support folder from user domain as text

yeah I got your script to work, but we need to be able to easily change the folder name like we used to be able to. This way, I would have to re-compile the script with a different folder name every time. We use this to send IBM Notes databases to users and they folders need to be dated so files don’t get overwritten.

Thanks Stefan

I missed it in the list given in Standard Additions dictionary.

At this time it seems that the problem is not the code itself but the way to use it.

May you look at my explanations and rewrite them in a better English ?

Yvan KOENIG running Sierra 10.12.2 in French (VALLAURIS, France) vendredi 6 janvier 2017 18:50:01

Glad to read that you got it running.

I apologizes but as I wrote, I know nothing about the Xml code which I guess is the one treating the folder name.

Yvan KOENIG running Sierra 10.12.2 in French (VALLAURIS, France) vendredi 6 janvier 2017 19:00:54

I’ll make it work, I’ll just have to write up some documentation for my colleagues so that they can recompile the script with whatever folder name they need. It’s just a bummer we are forced to use our Mac to do this now instead of just being able to open the workflow in Notepad++ and change the folder name. None of us here are mac users, we just have one in the office to test things. I really appreciate the help, my colleague has been trying to find a solution for this for months and I literally spent 2 hours on this forum and already got something that works lol. Thanks for that. However, if anyone is keen enough to figure out how to get this to work with a workflow, by all means I’ll take it.

Here is an edited version.

-- Added Notes 9 folder support

set pathToApplicationSupport to path to application support from user domain as text # Edited according to StefanK's message

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)
	set folderName to name of thisFolder # ADDED
	
	set theTargetFolder to (pathToApplicationSupport & "Lotus Notes Data:")
	set theCourseFolder to (pathToApplicationSupport & "Lotus Notes Data:" & folderName)
	
	if (exists folder theTargetFolder) is false 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 (exists folder theCourseFolder) is false 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

It defines the destination folder (folderName) according to the name of the folder in which you put the nrs files and the application itself.

Source Folder :
/Users/myHome/Desktop/my Container/
double click me.app
2017-01-06T10.57.34.nsf
2017-01-06T11.01.03.nsf

After use :
/Users/myHome/Desktop/my Container/
double click me.app

Destination folder :
/Users/myHome/Library/Application Support/Lotus Notes Data/
my Container
2017-01-06T10.57.34.nsf
2017-01-06T11.01.03.nsf

If you change the name of your folder the files will be moved in an other folder as described below.
Source Folder :
/Users/myHome/Desktop/Nabuchodonosor/
double click me.app
2017-01-04T10.57.34.nsf
2017-01-04T11.01.03.nsf

After use :
/Users/myHome/Desktop/ Nabuchodonosor/
double click me.app

Destination folder :
/Users/myHome/Library/Application Support/Lotus Notes Data/
Nabuchodonosor
2017-01-04T10.57.34.nsf
2017-01-04T11.01.03.nsf

Yvan KOENIG running Sierra 10.12.2 in French (VALLAURIS, France) vendredi 6 janvier 2017 19:13:44

@Yvan, my English is not better than yours

@myztklkev You can prompt the user to select the folder and enter a folder name


...
set thisFolder to choose folder with prompt "Choose source folder"
...
set folderName to text returned of (display dialog "Enter Folder name" default answer "")
...

I found a reason explaining that the workflow failed.
It uses linefeed as line break character.
Pasting the script in it inserted text using return as line break character.

Here is the document.workflow in which I inserted my script with the correct linefeeds.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>AMApplicationBuild</key>
	<string>381</string>
	<key>AMApplicationVersion</key>
	<string>2.4</string>
	<key>AMDocumentVersion</key>
	<string>2</string>
	<key>actions</key>
	<array>
		<dict>
			<key>action</key>
			<dict>
				<key>AMAccepts</key>
				<dict>
					<key>Container</key>
					<string>List</string>
					<key>Optional</key>
					<true/>
					<key>Types</key>
					<array>
						<string>com.apple.applescript.object</string>
					</array>
				</dict>
				<key>AMActionVersion</key>
				<string>1.0.2</string>
				<key>AMApplication</key>
				<array>
					<string>Automator</string>
				</array>
				<key>AMParameterProperties</key>
				<dict>
					<key>source</key>
					<dict/>
				</dict>
				<key>AMProvides</key>
				<dict>
					<key>Container</key>
					<string>List</string>
					<key>Types</key>
					<array>
						<string>com.apple.applescript.object</string>
					</array>
				</dict>
				<key>ActionBundlePath</key>
				<string>/System/Library/Automator/Run AppleScript.action</string>
				<key>ActionName</key>
				<string>Run AppleScript</string>
				<key>ActionParameters</key>
				<dict>
					<key>source</key>
					<string>-- Version 1.2 Click Me Script
-- Updated Jan. 06, 2016
-- Added Notes 9 folder support

set pathToApplicationSupport to path to application support from user domain as text

tell application "Finder"
	set folderName to "folder name here" as text
	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)
	--set folderName to name of thisFolder
	
	set theTargetFolder to (pathToApplicationSupport & "Lotus Notes Data:")
	set theCourseFolder to (pathToApplicationSupport & "Lotus Notes Data:" & folderName)
	
	if (exists folder theTargetFolder) is false 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 (exists folder theCourseFolder) is false 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</string>
				</dict>
				<key>BundleIdentifier</key>
				<string>com.apple.Automator.RunScript</string>
				<key>CFBundleVersion</key>
				<string>1.0.2</string>
				<key>CanShowSelectedItemsWhenRun</key>
				<false/>
				<key>CanShowWhenRun</key>
				<true/>
				<key>Category</key>
				<array>
					<string>AMCategoryUtilities</string>
				</array>
				<key>Class Name</key>
				<string>RunScriptAction</string>
				<key>InputUUID</key>
				<string>0F225918-9142-442F-92A9-B9032A232B6F</string>
				<key>Keywords</key>
				<array>
					<string>Run</string>
				</array>
				<key>OutputUUID</key>
				<string>F8B2933E-DE4D-4D38-88BB-49C5F86E6A27</string>
				<key>UUID</key>
				<string>6C8E865E-235B-44E0-BA48-CE29DBD45F57</string>
				<key>UnlocalizedApplications</key>
				<array>
					<string>Automator</string>
				</array>
				<key>arguments</key>
				<dict>
					<key>0</key>
					<dict>
						<key>default value</key>
						<string>on run {input, parameters}
	
	(* Your script goes here *)
	
	return input
end run</string>
						<key>name</key>
						<string>source</string>
						<key>required</key>
						<string>0</string>
						<key>type</key>
						<string>0</string>
						<key>uuid</key>
						<string>0</string>
					</dict>
				</dict>
				<key>conversionLabel</key>
				<integer>0</integer>
				<key>isViewVisible</key>
				<true/>
				<key>location</key>
				<string>309.500000:498.000000</string>
				<key>nibPath</key>
				<string>/System/Library/Automator/Run AppleScript.action/Contents/Resources/English.lproj/main.nib</string>
			</dict>
			<key>isViewVisible</key>
			<true/>
		</dict>
	</array>
	<key>connectors</key>
	<dict/>
	<key>workflowMetaData</key>
	<dict>
		<key>workflowTypeIdentifier</key>
		<string>com.apple.Automator.application</string>
	</dict>
</dict>
</plist>

I edited the text according to what I discovered some minutes ago.
The problem was that in the block containing the real AppleScript code, the ampersand characters “&” required to be encoded as “&”
I can’t do the changes above because they would be automatically destroyed.
You may see below the lines in which some changes must be applied - highlighter in underlined bold.

-±±±±±±±±±±±±±±
set theTargetFolder to (pathToApplicationSupport & “Lotus Notes Data:”)
set theCourseFolder to (pathToApplicationSupport & “Lotus Notes Data:” & folderName)

if (exists folder theTargetFolder) is false then
set theTargetFolder to (pathToApplicationSupport & “IBM Notes Data:”)
set theCourseFolder to (pathToApplicationSupport & “IBM Notes Data:” & folderName)
end if
-±±±±±±±±±±±±±±

I used the edited app here under 10.12.2 and it moved the files to the folder
“/Users/myHome/Library/Application Support/Lotus Notes Data/folder name here/”

Of course I am unable to reproduce what you use to pass it the name of the destination folder.

Test it on your machine.
If it fails I assumes that it’s the process inserting the folder name which plays the fool.

You may send a mail to : k o e n i g . y v a n @ s f r . f r
so that I may send you the Click Me .app with the edited workflow.

Just a question. There is a space between “Me” and “.app” in the app name. May it be the origin of your problem.
Maybe it was not here in the past and the scheme supposed to insert the folder name is fooled by that.

Yvan KOENIG running Sierra 10.12.2 in French (VALLAURIS, France) vendredi 6 janvier 2017 19:27:53

sadly we can’t trust our users to do anything on their own properly. We have this script because most of our users are not competent enough to move the files manually to the IBM Notes Data folder, so getting them to pick the directory would be just as bad.

That’s all jibberish to me unfortunately. This workflow/script works in every version of Mac OS that we’ve tried except Sierra.

I didn’t even notice you post this. I will have to take a look, and if it works good I will use it, it definitely seems like a better alternative then having to recompile the script every time. I greatly appreciate all the help.

Edit: This is fantastic! thank you

In the original script, thisFolder is the folder containing the script and the files to move.
There is no need to define it thru a dialog.

The instruction:
set folderName to text returned of (display dialog “Enter Folder name” default answer “”)
makes sense.

Honestly, I have some difficulties to understand the problem.
At this time I know that folderName was defined in Notepad++.
This doesn’t help because every word processor would do the job.
But this tell us that the sender is able to enter the directory and more, to enter in the package named click me.app to reach the file named document.wflow.

This means that this sender is able to navigate in the hierarchy:

.
SourceFolder
Click Me.app
Contents
document.wflow

I have an idea which seems to be viable.
What if we store the folderName in a text file stored in the folder with the script

We would have:

Source Folder :
/Users/myHome/Desktop/my Container/
double click me.app
folderNameInside.txt a text file containing the name to use. Mathusalem for instance
2017-01-06T10.57.34.nsf
2017-01-06T11.01.03.nsf

After use :
/Users/myHome/Desktop/my Container/
double click me.app
folderNameInside.txt a text file containing the name to use. Mathusalem for instance

Destination folder :
/Users/myHome/Library/Application Support/Lotus Notes Data/
Mathusalem
2017-01-06T10.57.34.nsf
2017-01-06T11.01.03.nsf

To do that, save the script below as an application named “double click me.app”

-- Added Notes 9 folder support

set pathToApplicationSupport to path to application support from user domain as text

tell application "Finder"
	--set folderName to "folder name here" as text
	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)
	
	# builds the path to the text file containing the filename to use
	set theTextFile to (thisFolder as text) & "folderNameInside.txt"
	# Read the text file
	tell me to set maybe to (read file theTextFile)
	# Drops the possible line breaks available in the text file
	set foldername to paragraph 1 of maybe
	
	set theTargetFolder to (pathToApplicationSupport & "Lotus Notes Data:")
	set theCourseFolder to (pathToApplicationSupport & "Lotus Notes Data:" & foldername)
	
	if (exists folder theTargetFolder) is false 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 (exists folder theCourseFolder) is false 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

For my tests, fileNameInside.txt contained :
[format]
Mathusalem
[/format]

Yvan KOENIG running Sierra 10.12.2 in French (VALLAURIS, France) vendredi 6 janvier 2017 21:42:39

I appreciate the further support but the script you came up with that uses the folder name that the nsf’s and the clickme resides in will work perfectly for us. So we will just have to put the nsf’s and the click me in the properly named folder before we send the zip to users which is just as easy/if not easier than being able to edit the folder name in the workflow file. And you are correct, any file editor will do, we just use notepad++ Thank you again for all your support, you just made our lives here much easier again.

I added comments to message #14 but I decided to post them here so that I hope that you will see them.

I edited the text according to what I discovered some minutes ago.
The problem was that in the block containing the real AppleScript code, the ampersand characters “&” required to be encoded as “&”
I can’t do the changes above because they would be automatically destroyed.
You may see below the lines in which some changes must be applied - highlighter in underlined bold.

-±±±±±±±±±±±±±±
set theTargetFolder to (pathToApplicationSupport & “Lotus Notes Data:”)
set theCourseFolder to (pathToApplicationSupport & “Lotus Notes Data:” & folderName)

if (exists folder theTargetFolder) is false then
set theTargetFolder to (pathToApplicationSupport & “IBM Notes Data:”)
set theCourseFolder to (pathToApplicationSupport & “IBM Notes Data:” & folderName)
end if
-±±±±±±±±±±±±±±

I used the edited app here under 10.12.2 and it moved the files to the folder
“/Users/myHome/Library/Application Support/Lotus Notes Data/folder name here/”

Of course I am unable to reproduce what you use to pass it the name of the destination folder.

Test it on your machine.
If it fails I assumes that it’s the process inserting the folder name which plays the fool.

You may send a mail to : k o e n i g . y v a n @ s f r . f r
so that I may send you the Click Me .app with the edited workflow.

Just a question. There is a space between “Me” and “.app” in the app name. May it be the origin of your problem.
Maybe it was not here in the past and the scheme supposed to insert the folder name is fooled by that.

Yvan KOENIG running Sierra 10.12.2 in French (VALLAURIS, France) dimanche 8 janvier 2017 18:37:42

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