Autor Beitrag
Nicor
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Do 01.09.05 13:42 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1068

Win 2000, Win XP
Delphi 7, Delphi 2005
BeitragVerfasst: Do 01.09.05 13:50 
Hallo!

Es gibt jetzt zwei Dinge die du machen musst:
  • Eine Batch-Datei erstellen. Einfach mit einem Texteditor eine Datei mit der Endung .bat anlegen und dort einfach folgendes einfügen:
    ausblenden batchdatei.bat
    1:
    projekt1.exe Ordner					

  • Außerdem musst deinen Anwendung den übergebenden Parameter (Ordner) auswerten. Das geht über die Funktion ParamStr (1).
Mehr ist nicht zu machen. ;-)

Lg Martin
Nicor Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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:
ausblenden 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 239

Win98SE, Win2000SP4
D7
BeitragVerfasst: 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:

ausblenden 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
ausblenden 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.