Autor Beitrag
pwsolaris
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 71
Erhaltene Danke: 1

MS DOS, Win 95, Win 98, Win ME, Win XP, Win Vista, Win 7 Ultimate
Delphi 5 Enterp., Delphi 2007, Delphi 2009, Informix 4GL, VB .NET, MS/SQL, PL/SQL
BeitragVerfasst: Mi 13.07.11 13:18 
Hallo,

ich habe mal wieder eine eher einfache Frage.

Ich möchte ein BackUp Programm für mich privat schreiben, welches mit dem Befehl "xcopy" arbeitet.
Bisher habe ich das immer über eine BAT Datei gelöst.

In meinem Programm möchte ich nur das Quell- und Ziellaufwerk auswählen und dann mit einem Button alle Dateien der Quelle auf das Ziellaufwerk sichern.
Zudem möchte ich den Sicherungsprozess mitloggen.

Wenn ich xcopy über die Eingabeaufforderung starte, sehe ich ja auch immer welche Datei er momentan kopiert usw. Diese Ausgabe möchte ich in meinem Programm in einem Memo-Feld verwirklichen und zudem auch in einer Text-Datei speichern.

Wie ich den Befehl xcopy aufrufe ist mit bekannt. Mir geht es hier vielmehr um das Anzeigen des xcopy- Status.

Kann mir einer von euch sagen, wie ich die Ausgabe über meine Programmoberfläche am besten umsetzen kann?
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Mi 13.07.11 14:03 
Shellexecute und und Datei umleiten per >>
oder etwas in der Art: ConsoleThread ist im Anhang
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
implementation
uses ConsoleThread;


var
  cs:TConsoleThread;

Procedure TheCallBack(s:AnsiString);
var
  ansi:WideString;
begin
  Setlength(ansi,length(s));
  OemToChar (@s[1],@ansi[1]);
  ansi := StringReplace(StringReplace(ansi,#9689,#10,[rfReplaceAll]),#9834,#13,[rfReplaceAll]);
  Form1.Memo1.Text:=Form1.Memo1.Text+ansi;
  Form1.Memo1.Perform(EM_LineScroll, 0 , Form1.Memo1.Lines.Count-1);

end;

procedure TForm1.Button7Click(Sender: TObject);
begin
   cs := TConsoleThread.Create('cmd /C xcopy C:\temp\*.txt C:\temp\kill /Y'#13#10'','',TheCallBack);  // ACHTUNG CMD nur so
   cs.Resume;
end;
Einloggen, um Attachments anzusehen!
_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Mi 13.07.11 14:40 
ganz simple variante

ausblenden Delphi-Quelltext
1:
xcopy C:\temp\*.txt					

erweitern zu
ausblenden Delphi-Quelltext
1:
xcopy C:\temp\*.txt c:\Zielordner /y > DeinLogDateiName.txt					

Dann im Prog einfach die Datei 'DeinLogDateiName.txt' in ein Memo einlesen

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Mi 13.07.11 15:01 
Noch simpler: suche mal nach TDosCommand.

EDIT: wobei ich grade sehe, TConsoleThread ist schon da. Das reicht dann ja ;)

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 14.07.11 06:38 
XCOPY ?
Das halte ich für keine gute Idee.
XCOPY ist uralt und hat nur eingeschränkte Möglichkeiten.

Guckst Du hier (Source+EXE):
delphi.about.com/lib...weekly/aa033004a.htm
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Do 14.07.11 09:42 
Spricht doch nix dagegen, das zu nutzen wenn es alles kann was der OP will.

Gut, ich verwende in meiner Sync-Lösung auch Robocopy (mit Wrapper-Skripten), aber das halt weil ich /MIR gebraucht hab ;)

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 14.07.11 10:07 
user profile iconhathor hat folgendes geschrieben Zum zitierten Posting springen:
XCOPY ist uralt und hat nur eingeschränkte Möglichkeiten.

Was hat das alter eines Programms mit seiner Funktionalität zu tun? Es wird noch immer von Microsoft zu seinen Betriebssystemen ausgeliefert. Warum soll man es also nicht nutzen? Und wenn es das tut, was verlangt wird, warum dann ein anderes nutzen? Oder würdest du mir auch empfehlen Photoshop für mehrere tausend Euro zu kaufen nur, um Bilder etwas nachzuschärfen und rote Augen zu korrigieren? :roll:

Aber was ganz anderes? Warum wird da jetzt ein Delphi Programm drumherum gebastelt? Wenn ich schon ein Delphi Programm dafür schreibe, dann kann ich doch auch gleich die passenden API Funktionen nutzen. Wenn ich doch nur wieder ein Konsolenprogramm aufrufe, kann ich doch auch bei dem Batchscript bleiben.
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Do 14.07.11 10:10 
Ich finde, für ein Anfängerprojekt ist ein Wrapper für eine Konsolenanwendung durchaus ein schönes Projekt. Und wenn dann auch noch was einigermaßen nützliches rauskommt - um so besser.
Ich hab auch mal vor 15 Jahren damit angefangen, einen Wrapper für ein MP3-Konvertierungstool in VB zu programmieren. Also, why not?
Dass man es als etwas erfahrener Programmierer vielleicht anders machen würde steht auf einem anderen Blatt.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)

Für diesen Beitrag haben gedankt: Martok