You used it right but i wrote it wrong.
Fixed (it would have copied only props in the excludeList) and added dialog for selecting properties to skip/exclude.
Code:
[h: '<!-- get source and destination via user input -->']
[h: tokens = getTokens()]
[h: names = ""]
[h, foreach( id, tokens ): names = listAppend(names, getName(id))]
[h: status = input(
strformat("srcIdx|%s|Select source|LIST", names),
strformat("destIdx|%s|Select destination|LIST", names)
)]
[h: abort(status)]
[h: assert( srcIdx != destIdx ,"You must select different tokens.")]
[h: src = listGet(tokens, srcIdx)]
[h: dest = listGet(tokens, destIdx)]
[h: '<!-- set states -->']
[h: allStates = getTokenStates()]
[h, foreach(state, allStates): setState(state, getState(state, src), dest)]
[h: '<!-- set image -->']
[h, token(src): image = getTokenImage()]
[h, token(dest): setTokenImage( image )]
[h: '<!-- copy properties -->']
[h: allProps = getPropertyNames(",", src)]
[h: '<!-- build dialog -->']
[h: fields = ""]
[h, foreach(prop, allProps): fields = json.append(fields, strformat("exclude%s|0|%s|CHECK", prop, prop))]
[h: status = input(json.toList(fields, "##"))]
[h: abort(status)]
[h: excludeList = ""]
[h, foreach(prop, allProps), code: {
[h, if(eval("exclude"+prop)==1): excludeList = listAppend(excludeList, prop)]
}]
[h, foreach(prop, allProps), code: {
[h, if(listFind(excludeList, prop)==-1), code: {
[h: setProperty(prop, getProperty(prop, src), dest)]
};{}]
}]
[h: '<!-- misc -->']
[h: setName(getName(src)+" copy", dest)]
[h: setGMName(getGMName(src), dest)]
[h: setLabel(getLabel(src), dest)]
[h, token(src): notes = getNotes()]
[h, token(dest): setNotes(notes)]
[h, token(src): notes = getGMNotes()]
[h, token(dest): setGMNotes(notes)]
[h, if( isPC(src)): setPC(dest); setNPC(dest)]
[h: setSize(getSize(src), dest)]
[h: setVisible(getVisible(src), dest)]
[h: setPropertyType(getPropertyType(src), dest)]
[h: '<!-- macros -->']
[h: allMacros = getMacros(",", src)]
[h, foreach( macro, allMacros ), code: {
[h: indexes = getMacroIndexes(macro, ",", src)]
[h, foreach( index, indexes ), code: {
[h: props = getMacroProps(index, "json", src)]
[h: createMacro(props, dest)]
}]
}]