ShellExecute ist 'ne Funktion, eventuell mal deren Rückgabewert anschauen? Der kann sehr aufschlussreich sein.
Werte über 32 bedeuten, dass der Aufruf ok war, alles darunter deutet auf 'nen Fehler hin.
https://docs.microsoft.com/en-us/win...-shellexecutea
Wenn ich Deinen ShellExecuteaufruf richtig interpretiere, startet der eine CMD.exe die ForFiles startet, damit dieses für jede passende Datei eine CMD.exe startet, die dann für die angegebene Datei ein DEL ausführt.
Bei Deiner Art CMD.exe aufzurufen fehlt noch der Parameter /c, damit sich CMD.exe nach dem Ausführen von ForFiles beendet. (Keine Ahnung, ob ShellExecute wartet, bis CMD.exe fertig ist, wenn ja, dann wäre das ein möglicher Grund für das "Nichtfunktionieren".)
Delphi-Quellcode:
var
iResult : Integer;
begin
iResult := ShellExecute(
handle,'
open','
cmd.exe','
/c ForFiles /p "C:\Users\NAME\Desktop\Test" /s /m *.* /d -60 /c "cmd /c del @file"',
nil,SW_hide);
if iResult < 33
then begin
ShowMessage(IntToStr(iResult));
// Oder sonstwie auf den Rückgabewert von ShellExecute reagieren.
end;
end;
Das ForFiles eine Programm ist, könnte aber dashier schon ausreichend sein:
Delphi-Quellcode:
var
iResult : Integer;
begin
iResult := ShellExecute(0,nil,'ForFiles','/p "C:\Users\NAME\Desktop\Test" /s /m *.* /d -60 /c "cmd /c del @file"',nil,SW_hide);
if iResult < 33 then begin
ShowMessage(IntToStr(iResult)); // Oder sonstwie auf den Rückgabewert von ShellExecute reagieren.
end;
end;
Und natürlich: Solange es nicht funktioniert nicht SW_Hide verwenden, sondern SW_Normal, damit man ggfls. Meldungen auf der Konsole sehen kann.