OK, so I've answered my own question and have a working solution.
Short version - Sending M98 P"PrePrint" will fetch any file from whichever sub folder of .sys which has been selected using M505. So sending M505 P"6Input" will change the M98 path from sys/PrePrint to sys/6Input/PrePrint.
Longer version. I created 4 sub folders of sys so sys/6InputMixing, sys/6InputMultiMat, sys/2Input and sys/SingleInput. Then I copied the contents of sys into each of these sub folders. I edited each of the configuration and homing files to suit each hot end configuration and added an M291 to each file so that I get a message box stating which folder the file has been fetched from. I also made a file called "PrePrint.g" which has nothing but an M291 with a message stating the sys folder name. This was copied to each of the 4 sub folders of sys and edited so that the message reflects the name of the sub folder in which that particular instance of the file exists.
The config.g file which is in sys is as follows
; Configuration file for Duet Gen 3
; ******CHOOSE .SYS PATH ******
M505 P"6InputMultiMat"
;M505 P"6InputMixing"
;M505 P"SingleInput"
;M505 P"2Input"
M98 P"config.g"
By commenting out all but one of the M505 lines, and cycling power, I changed between all of the configuration folders. The I sent M98 P"PrePrint" and confirmed that the file was indeed being fetched from the correct sub folder of .sys.
So now all I have to do is move the proper Pre-Print Macros from the "macros" folder to the sys/subfolders, and change my slicer start code from M98 P"0:/macros/PrePrint.g" to M98 P"PrePrint.g" and it will fetch the correct PrePrint macro from whichever subfolder is selected by M505 to suit the machine configuration.