Do you mean: if the same destination file exist, then delete the destination file? I think it's better to automatically rename the destination file, not to delete/overwrite it. So, if destination file ("filename.zzz") exists, then save new file destination as "filename_001.zzz". If "filename_001.zzz" exists, then save as "filename_002.zzz", or "filename_003.zzz", "filename_004.zzz", and so on...
I advance slowly but I found a solution for that, what posed me the most problem was to choose to integrate it in the macro save or to create a new one, the second chose turned out much wiser, and the name of the macro will be left to the complacency of rejetto if a better name is dear to him.
I made the temporary choice as we could find it in the wiki:

{.first free|A.}
You can specify A as a file name, or as a URL. It will load and expand to it. The file or URL you specify must be accessible from the server machine. A can be
C:\windows\win.ini or also absolute
/another_file_in_VFS/the_file_i_want.txt or also relative from current folder
hello/the_file_i_want.txt in case the path is not provided, the macro generates an error of unsatisfactory parameters
Optional parameter
limit to specify a max seaching index. if ommited default value is 10.
Example {.first free|c:\temp\hfs.tmp|limit=5.}
the principle is to provide to the macro a path in the form of url or absolute, an increment is then used to find a new free file name, without exceeding the number of 10, unless we specify a parameter named 'max'
the function will return an empty string in case of invalid path, or of limit exceded
function firstfree():string;
var
dest, ext: string;
i, limit : integer;
begin
result:='';
try
limit:=parI('limit', 10);
pars.Delete(pars.IndexOfName('limit')); // to be sure there is a valid parameter for the path in pars[1]
p:=trim(pars[1]);
// we make sure that the file can be put on a physical support
if not DirectoryExists(uri2diskMaybeFolder(p)) then exit;
ext:=extractFileExt(p);
dest:= copy(p,1,length(p)-length(ext));
i:=0;
while fileExists(uri2diskMaybe(p)) do
begin
inc(i);
// test limit here to avoid prolonging the loop unnecessarily
if (i > limit) then exit; // function must return an empty string
p:=format('%s (%d)%s', [dest, i, ext]);
end;
except exit; end;
result:=p;
end;