AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Shell execute

Ein Thema von DomPerle · begonnen am 14. Okt 2019 · letzter Beitrag vom 16. Okt 2019
Antwort Antwort
DomPerle

Registriert seit: 26. Apr 2017
20 Beiträge
 
#1

Shell execute

  Alt 14. Okt 2019, 13:50
Hallo zusammen,

was muß ich tun, damit dieser Befehl richtig ausgeführt wird.

prog := copy(Form1.Programm,1,4); //Programm hat den Inhalt '15010000' also Prog = 1501
Ziel := 'C:\hdh\Transfer';

shellExecute(0, nil, 'cmd.exe', '/k copy prog ziel', nil, SW_SHOW); //Ergebnis: Datei nicht gefunden

shellExecute(0, nil, 'cmd.exe', '/k copy C:\hdh\1501 C:\hdh\Transfer', nil, SW_SHOW); //OK
Grüß domperle
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.684 Beiträge
 
Delphi 5 Professional
 
#2

AW: Shell execute

  Alt 14. Okt 2019, 14:02
Du musst den Pfad richtig zusammenbauen. Frage: Was kommt raus, wenn du 'C:\hdh\Transfer' und '1501' verkettest? Antwort: 'C:\hdh\Transfer1501'. Du willst aber offenbar etwas anderes, und außerdem willst du nicht 'prog ziel' als literale Strings haben. Die Funktion Delphi-Referenz durchsuchenFormat ist übrigens sehr hilfreich beim formatierten Verketten von Variablen.

Unabhängig davon lassen sich mit Delphi auch ohne Hilfe der CMD Dateien kopieren (z.B. CopyFile(Ex)).

Grüße
Dalai

Geändert von Dalai (14. Okt 2019 um 14:04 Uhr)
  Mit Zitat antworten Zitat
DomPerle

Registriert seit: 26. Apr 2017
20 Beiträge
 
#3

AW: Shell execute

  Alt 14. Okt 2019, 14:40
Du hast natürlich recht, der Code muß so aussehen.

Prog := 'C:\hdh\' + copy(Form1.Programm,1,4); //Programm hat den Inhalt 15010000 Prog = C:\hdh\1501
Ziel := 'C:\hdh\Transfer';

shellExecute(0, nil, 'cmd.exe', '/k copy prog ziel', nil, SW_SHOW);

shellExecute(0, nil, 'cmd.exe', '/k copy C:\hdh\1501 C:\hdh\Transfer', nil, SW_SHOW);

Quelle und Ziel des copy_Befehls sollen Variable sein, die ich durch Zuweisungen ändern kann.
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.684 Beiträge
 
Delphi 5 Professional
 
#4

AW: Shell execute

  Alt 14. Okt 2019, 15:05
Meine Variante wäre diese, auch wenn das mit Sicherheit noch verbesserungsfähig ist (aber unter den gegebenen Bedingungen wohl brauchbar):
Delphi-Quellcode:
const cZiel = 'c:\hdh';

Prog := IncludeTrailingPathDelimiter(cZiel) + Copy(Form1.Programm,1,4);
Ziel := IncludeTrailingPathDelimiter(cZiel) + 'Transfer\';
ShellExecute(0, nil, 'cmd.exe', Format('/k copy "%s" "%s"', Prog, Ziel), nil, SW_SHOW);
Grüße
Dalai
  Mit Zitat antworten Zitat
DomPerle

Registriert seit: 26. Apr 2017
20 Beiträge
 
#5

AW: Shell execute

  Alt 15. Okt 2019, 06:35
Jetzt hast Du mich kalt erwischt:
Meine Delphi-Kenntnisse reichen nicht aus,um Deinen Vorschlag korrekt einbauen zu können.
Hier nochmal der jetzige Stand und die Fehlermeldung:

procedure TForm3.Button3Click(Sender: TObject);
const cZiel = 'c:\hdh';
var
prog : String;
Ziel : String;

begin
Prog := IncludeTrailingPathDelimiter(cZiel) + Copy(Form1.Programm,1,4);
Ziel := IncludeTrailingPathDelimiter(cZiel) + 'Transfer\';
ShellExecute(0, nil, 'cmd.exe', Format('/k copy "%s" "%s"', Prog, Ziel), nil, SW_SHOW);

MyShowMessage('Programmpaket im Verzeichnis ''C:\hdh\Transfer'' gespeichert', 12);
End;
Fehlermeldung:
[Fehler] Konvert_Unit3.pas(116): Undefinierter Bezeichner: 'IncludeTrailingPathDelimiter'
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.962 Beiträge
 
Delphi 12 Athens
 
#6

AW: Shell execute

  Alt 15. Okt 2019, 06:44
Welche Delphiversion hast du denn? In der aktuellen (auch kostenlos erhältlichen) Version liegt die Funktion in der Unit System.SysUtils, die dann oben hinter uses in der Liste stehen muss.

Kompilieren wird das aber trotzdem nicht, denn ShellExecute erwartet einen PChar, keinen String, und hat auch andere Parameter als Dalai geschrieben hat (man beachte die eckigen Klammern):
ShellExecute(0, nil, 'cmd.exe', PChar(Format('/k copy "%s" "%s"', [Prog, Ziel])), nil, SW_SHOW);
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:33 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-2025 by Thomas Breitkreuz