Entwickler-Ecke

Sonstiges (Delphi) - Delphi Programm über Batch Datei "steuern"


Nicor - Do 01.09.05 13:42
Titel: Delphi Programm über Batch Datei "steuern"
Ich habe folgendes Problem:

Ich habe zur Aufgabe bekommen ein Programm zu schreiben das Dateien in einem Ordner einliest und die Dateinamen ändert (würd benötigt für ein Backupverfahren). Bis hierhin hab ich da auch kein Problem.

ABER

das ganze soll so ablaufen das das Nachts geschieht, d.h. eine Batch Datei wird aufgerufen und bekommt als Parameter den Ordnerpfad worauf mein Programm gestartet wird und "durchläuft"

Leider habe ich von Batch Dateien im Zusammenhang mit Delphi keine Erfahrung. Wie "verknüpfe" ich die Batch mit meinem Programm? Wie lauten die Befehle?Wie übergebe ich den Parameter (Ordnerpfad) aus der Batch an mein Programm? usw....

Es wäre sehr nett wenn jemand der sich da auskennt ein paar Hinweise für mich hätte.

Schon mal Dank im Vorraus

Mfg


Martin1966 - Do 01.09.05 13:50
Titel: Re: Delphi Programm über Batch Datei "steuern"
Hallo!

Es gibt jetzt zwei Dinge die du machen musst:
Mehr ist nicht zu machen. ;-)

Lg Martin


Nicor - Fr 02.09.05 07:47

Ok dank dir schonmal für die Antwort :)

Erstens ist kein Problem^^

aber bei zweitens bin ich noch nicht so ganz auf dem richtigen Pfad:

meine Batch sieht jetz so aus:

Delphi-Quelltext
1:
Project1.exe C:\test                    


C:\test ist das Verzeichniss in dem die Dateien gesucht und umbenannt werden sollen.

Mein "Test-Programm" sieht jetz so aus:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.FormCreate(Sender: TObject);
var test: string;
begin
test:=ParamStr(1);
label1.caption:=test;
end;

end.


Also für test müsste da jetz der Pfad aus der Batch stehen (c:\test) es kommt jedoch nichts und wenn ich den ParamStr(0) setze bekomme ich den Pfad in dem mein Programm liegt.

Und wieder danke im Vorraus :)


LigH - Fr 02.09.05 08:08

Bevor es mit der Programmierung in Formularen losgeht, mach doch erst mal kleine Schritte: Erzeuge ein Consolen-Programm, z.B. mit folgendem Inhalt:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
program ParamTest;

var
  ParCount, ParIdx: Integer;
  ParStr: String;

begin
  ParCount := ParamCount;
  if ParCount > 0
  then for ParIdx := 1 to ParCount do begin
    ParStr := ParamStr(ParIdx);
    WriteLn('Parameter #', ParIdx, ' = ', ParStr)
  end
  else WriteLn('Fehler: Es wurden keine Parameter übergeben.')
end.

Das kannst du dann erst mal an der Kommandozeile direkt aufrufen, z.B. mit

Quelltext
1:
ParamTest erster zweiter dritter                    

Läuft das, kommt als nächstes der gleiche Aufruf in einer Batch-Datei.

In der IDE kann man es testen über "Start - Parameter" vor dem Ausführen. Da das Fenster danach aber sofort wieder schließen würde, solltest du da noch ein ReadLn; als letzte Programmzeile einfügen.
___

Übrigens:

Den Inhalt von Komponenten schon während Form.OnCreate zu beeinflussen, hat nach meiner Erfahrung schon oft zu Problemen geführt. Ich musste normalerweise immer dafür sorgen, dass Komponenten auf einem Formular "verzögert" erst dann geändert wurden, wenn es fertig erstellt worden war. Dafür habe ich leider noch keine ideale Lösung gefunden - ein Timer erscheint mir dafür brauchbar, aber nicht ideal.

In deinem Fall allerdings würde ich auch beim Schreiben von Formular-Applikationen die Auswertung von Parametern in den Quelltext der Projektdatei (*.dpr) programmieren. Dafür kannst du nutzen: Menü "Projekt", Eintrag "Quelltext anzeigen". Denn dein Programm soll ja automatisch laufen. Und ehrlich gesagt: Eigentlich sind Konsolenprogramme für automatische Aufgaben gar nicht so schlecht. Man kann natürlich auch hübsche Fenster mit Fortschrittsanzeigen verwenden, selbstverständlich.