>>148,>>149
ありがとうございました。
del %0の意味がわからなかったので
-----------------------------------------------------------------
void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
{
TStrings *s = new TStringList;

  s->Add(":lbl0");
  s->Add("del " + Application->ExeName);
  s->Add("if exist " + Application->ExeName + " goto lbl0");
// s->Add("del %0");
  s->Add("exit");

  AnsiString exepath = ExtractFilePath(Application->ExeName);
  AnsiString batpath = exepath + "del.bat";
  s->SaveToFile(batpath);
  ShellExecute(this->Handle,"open", batpath.c_str()
     ,NULL,NULL,SW_SHOWNORMAL);

}
-----------------------------------------------------------------
と、コメントアウトしないものを比較してみて意味がわかりました。
そして%0ってbatでしか使えないということも調べがつきました。
ありがとうございました。