Q:

How can I copy files from the installer to the hard drive in NSIS but only if they do not already exist or are newer then the existing ones?

At the moment I am using:
SetOutPath "$INSTDIR\folder\subfolder"
File /r ..\Output\*.*

The problem is when re-installing all files will be overwritten.
Questions:

How do I copy the files from the installer only if they do not already exist in the target directory?
and
How do I overwrite those files in the target directory that are older then the ones in the installer?

Edit:
I found this macro: http://nsis.sourceforge.net/MoveFileFolder

A:

I think the best solution is to use the SetOverwrite flag:
http://nsis.sourceforge.net/Docs/Chapter4.html#4.8.2.8
This flag can be changed on the fly within a section.
So to answer the question specifically:
SetOverwrite off       # Only copy if file does not exist
File /r ..\Output\*.*

SetOverwrite ifnewer   # Only overwrite if installers' file is newer
File /r ..\Output\*.*

A:

Use combination of IfFileExists and SetOverwrite:
Section "Copy newer files"
SetOverwrite ifnewer 
; Set flag to owerwrite files only if they are newer than files in output dir

IfFileExists $INSTDIR\program.exe FileExists FileDoesNotExist

FileDoesNotExist:
; Copy file to output directory

SetOutPath "$INSTDIR"
File "program.exe" ; Flag from SetOverwrite is applied here

FileExists:
; File exists - do nothing 

; Continue ...
SectionEnd

