ShellExecute und Batch-Datei mit Parametern (war: ShellExecute)
-
Hi ich habe ine Prblem mit dem Befel ShellExecute ich will eine .bat Datei mit Attribute was mache ich falsch
AnsiString Temp1 = "" + Edit2->Text + Edit3->Text + " " + Edit2->Text + "*.msg"; char *ch = new char[Temp1.Length()+1]; strcpy(ch, Temp1.c_str()); ShellExecute(0,"open","\Copy2.bat",ch,0,SW_SHOWNORMAL);Das ist der Inhalt der .bat Datei wer einen Vorschlag hat wie mann das in C++ losen kann ich bin für vorschläge offen
@echo off C:\Programme\WinRAR\RAR.exe A "%1" "%2" del %2Edit:
Bitte aussagekräftige Überschriften wählen. Danke!
-
Du brauchst den String nicht zu kopieren, sondern einfach die Methode "c_str()" aufrufen:
AnsiString Temp1 = Edit2->Text + Edit3->Text + " " + Edit2->Text + "*.msg"; ShellExecute(0,"open","Copy2.bat",Templ.c_str(),0,SW_SHOWNORMAL);Außerdem ist "\C" falsch, wenn die Batch-Datei im aktuellen Verzeichnis liegt (dies kann sich im Programm natürlich ändern), dann einfach "Copy.bat" oder auch ".\\Copy.bat" (\ muß maskiert werden!)
-
Hallo
wenn die Batch-Datei im selben Verzeichnis wie das Programm ist
ShellExecute(0,"open","Copy2.bat",Templ.c_str(),0,SW_SHOWNORMAL);bis bald
akari
-
Man könnte das mit der Batchdatei auch lassen und RAR direkt über ShellExecute aufrufen und dann die Datei mit DeleteFile löschen.
-
hi die .bat Datei wird nicht aufgerufen fileicht fidet ihr einen Fehelr in dem Eingentlichen Code
void __fastcall TForm1::Button1Click(TObject *Sender) { TSearchRec sr; int iAttributes = 0; StringGrid1->RowCount = 1; iAttributes |= faReadOnly * CheckBox1->Checked; iAttributes |= faHidden * CheckBox2->Checked; iAttributes |= faSysFile * CheckBox3->Checked; iAttributes |= faVolumeID * CheckBox4->Checked; iAttributes |= faDirectory * CheckBox5->Checked; iAttributes |= faArchive * CheckBox6->Checked; iAttributes |= faAnyFile * CheckBox7->Checked; StringGrid1->RowCount = 0; int Fehler = 0; if(CheckBox8->Checked == true) { Memo1->Lines->Add("Detaliret Auflistung der Kopierten Darteien\n"); // Memo1->Lines->Add("\nVom" + DateToStr(Date)); } CheckBox8->Enabled = false; DateTimePicker1->Enabled = false; DateTimePicker2->Enabled = false; Button1->Enabled = false; Edit1->Enabled = false; Edit2->Enabled = false; DriveComboBox1->Enabled = false; DriveComboBox2->Enabled = false; DirectoryListBox1->Enabled = false; DirectoryListBox2->Enabled = false; Button2->Enabled = false; Button1->Caption = "Dateien werden Kopiert ..." ; if (FindFirst(Edit1->Text, iAttributes, sr) == 0) { do { if ((sr.Attr & iAttributes) == sr.Attr) { StringGrid1->RowCount = StringGrid1->RowCount + 1; StringGrid1->Cells[1][StringGrid1->RowCount-1] = sr.Name; StringGrid1->Cells[2][StringGrid1->RowCount-1] = IntToStr(sr.Size); StringGrid1->Cells[3][StringGrid1->RowCount-1] = sr.Time; TDateTime TempTime = FileDateToDateTime(sr.Time) ; if(TempTime >= DateTimePicker1->DateTime-1 && TempTime <= DateTimePicker2->DateTime) { StringGrid1->Cells[3][StringGrid1->RowCount-1] = "richtig"; AnsiString Temp1 = DirectoryListBox1->Directory + Label7->Caption + sr.Name; if(sr.Name == "." || sr.Name == "..") { StringGrid1->Cells[3][StringGrid1->RowCount-1] = "falsch" ; } else { if(!MoveFiles(Temp1, Edit2->Text)) { if(CheckBox8->Checked == true) { Memo1->Lines->Add("Die Datei " + sr.Name + " wurde erfolgreich nach " + DirectoryListBox1->Directory + " kopiert\n"); } } else { StringGrid1->Cells[3][StringGrid1->RowCount-1] = "Fehler" ; Fehler++; if(CheckBox8->Checked == true) { Memo1->Lines->Add("Die Datei " + sr.Name + " wurde nicht erfolgreich nach " + DirectoryListBox1->Directory + " kopiert\n"); } } } } else { StringGrid1->Cells[3][StringGrid1->RowCount-1] = "falsch" ; } } } while (FindNext(sr) == 0); FindClose(sr); if(CheckBox9->Checked == true) { // AnsiString Temp1 = Label17->Caption + Label19->Caption + "a df " + Label17->Caption + DirectoryListBox1->Directory + Label7->Caption + Edit3->Text + Label17->Caption + " " + Label17->Caption + Edit2->Text + "*.msg" + Label17->Caption + Label17->Caption; AnsiString Temp1 = Edit2->Text + Edit3->Text + " " + Edit2->Text + "*.msg"; ShellExecute(0,"open","Copy2.bat",Temp1.c_str(),0,SW_SHOWNORMAL); } if(Fehler != 0) { ShowMessage("Fehler aufgetreten !"); } else { ShowMessage("Fertig"); } } CheckBox8->Enabled = true; DateTimePicker1->Enabled = true; DateTimePicker2->Enabled = true; Button1->Enabled = true; Edit1->Enabled = true; Edit2->Enabled = true; DriveComboBox1->Enabled = true; DriveComboBox2->Enabled = true; DirectoryListBox1->Enabled = true; DirectoryListBox2->Enabled = true; Button2->Enabled = true; Button1->Caption = "Dateien Kopieren" ;
-
Evtl. mußt du dir bei Programmstart das aktuelle Verzeichnis (bzw. das Verzeichnis der EXE) merken und dann vor den Namen der Batch-Datei hängen.
schau mal nach:
- Application.ExeName
- ExtractFilePath(...)