Eso pasa porque estás mezclando código. La idea de la función que puse es aislar el problema de obtener el nombre corto. Prueba así:
Código Delphi
[-]
procedure TForm1.Button2Click(Sender: TObject);
begin
if FileExists(Opendialog1.FileName) then
ShellExecute(Handle, 'open', 'D:\re2\delphi\HAND.CMD', PChar(GetShortName(Opendialog1.FileName)), nil, SW_NORMAL)
else
ShowMessage('No se ha cargado Archivo');
end;
// Saludos