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;