![]() |
DosCommand ohne exe
Hallo,
ich habe ein Problem mit dem Ausführen von DosCommands. Habe mir die entsprechende Unit ( ![]() uses ... DosCommand var cmd: TDosCommand; procedure TMainForm.FormCreate(Sender: TObject); ... cmd:=TDoscommand.Create(self); procedure ...; ... cmd.CommandLine := 'h:\mamima\irfanview\i_view32.exe'; cmd.Execute; Wenn ich nun aber den Exe-Aufruf durch einen simplen Dos-Befehl wie 'md h:\test' oder 'del h:\test.txt' uws. ersetze bekomm ich stets einen TCreateProcessError mit der folgenden Fehlermeldung: 'md h:\test doesn't exist.' Dieser Fehler tritt in der DosCommand-Unit auf beim Versuch einen Prozess zum Commandline-Befehl zu erstellen. Ich bilde mir ein, dass das Ausführen eines del-Befehls schon mal kurz geklappt hatte, aber ich bekomm s einfach nicht mehr hin. Falls ich nur Exe-Aufrufe und ähnliches mit DosCommand ausführen könnte, dann wär das überflüssig, weil ich ja ShellExecute nehmen kann. Vielen Dank für nützliche Antworten! |
Re: DosCommand ohne exe
und für das löschen gibt es deletefile.....
Was willst du denn so unbedingt da machen? |
Re: DosCommand ohne exe
Wenn ich's recht im Kopf habe, muß man DOS-Befehle über die cmd.exe mit Parametern ausführen
Code:
z.B.
cmd.exe /C del c:\windows\*.*
Allerdings funktioniert dieser Aufruf mit ShellExecute. Wie dein DosCommands-Objekt damit umgeht, kann ich dir nicht sagen. Edit: Ähnlich auch mit *.bat-Dateien. |
Re: DosCommand ohne exe
Vielleicht wäre es besser, statt cmd.exe %comspec% auszuwerten (für alte 9x-Kisten).
|
Re: DosCommand ohne exe
Ich möchte gern sehr viele Dateien eines bestimmten Typs (am besten auch in allen Unterverzeichnissen) löschen.
Meine Vorstellung dazu ist: Cmd.CommandLine:='del '+GetCurrentDir+'\*.bmp /s'; Ich glaub, ich kann deletefile nicht mit * im Filname aufrufen oder gibts da was? Danke |
Re: DosCommand ohne exe
Du könntest erst alle bmps suchen und diese dann löschen.
|
Re: DosCommand ohne exe
Vielen Dank für die vielen Antworten.
Ich hab s jetzt über ShellExecute (bzw. ShellExecuteEx) gelöst. Wusste nicht, dass ich dort cmd.exe als Anwendung übergeben kann. Super und besten Dank, vor allem gmc616! |
Re: DosCommand ohne exe
Besser, wenn du den Hinweis von DeddyH beachtest: Früher war "command.com" der Kommandozeileninterpreter. Also den gültigen Namen über %comspec% bestimmen, dann liegst du auf der sicheren Seite.
|
Re: DosCommand ohne exe
Das ist aber nicht die feine griechische Art.
Du musst nicht einen anderen Process bemühen um Windows-Befehle auszuführen. |
Re: DosCommand ohne exe
Also es läuft jetzt, aber ich mach s natürlich lieber auf der sicheren Seite. Wie müsste ich denn in meinem jetzigen Code ändern um die %compsec% Variante zu wählen?
// Delete Bitmaps. exstr:='cmd.exe'; pstr:='/C del '+path+'*.bmp'; shexecinfo.cbSize:=sizeof(SHELLEXECUTEINFO); shexecinfo.fMask:=SEE_MASK_NOCLOSEPROCESS; shexecinfo.lpVerb:=nil; shexecinfo.lpFile:=PChar(exstr); shexecinfo.lpParameters:=PChar(pstr); shexecinfo.lpDirectory:=nil; shexecinfo.nShow:=SW_HIDE; ShellExecuteEx(@shexecinfo); WaitForSingleObject(shexecinfo.hProcess,INFINITE); Wieder mal DANKE! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz