der Hinweistext
writeln('Erzeugt eine... sollte standardmäßig eigentlich nur angezeigt werden, wenn man auch einen Hilfe-Parameter (ala -? -h /? /h ) angibt
oder bei Programmen, welche auf gewisse Parameter angewiesen sind, dann wenn diese nicht angegeben wurden.
etwas unpraktisch, daß man immer alle Parameter angeben muß
und die globalen Variablen ... ohne wäre es auch ohne viel Mehraufwand gegangen
und die Deutsch-Englischmischung von Namen muß eigentlich auch nicht unbedingt sein
[add]
nur schnell zusammengetippt und nicht getestet
Delphi-Quellcode:
program Verzeichnisliste;
{$APPTYPE CONSOLE}
uses
SysUtils, Classes;
procedure ProgressDirectory(const ADirectory: string; MaxRek: integer;
const Einrueckstring: String; ProtDatei : TStringList);
var
SR: TSearchRec;
begin
if (FindFirst(ADirectory + '*.*', faDirectory, SR) = 0) and
(MaxRek > 0) then
begin
repeat
if (SR.Name <> '.') and (SR.Name <> '..') and (SR.Attr and faDirectory <> 0) then
begin
if Assigned(ProtDatei) then
ProtDatei.Add(Einrueckstring + SR.Name);
ProgressDirectory(ADirectory + SR.Name + '\', MaxRek - 1, Einrueckstring + ' ', ProtDatei);
end;
until FindNext(SR)<>0;
FindClose(SR);
end;
end;
var
Verzeichnis, ProtDateiName : string;
ProtDatei : TStringList;
MaxRek, i : integer;
begin
WriteLn('Verzeichnisliste (c) 2009 Andreas Welzien');
WriteLn;
Verzeichnis := '';
ProtDateiName := '';
MaxRek := 8;
for i := 1 to ParamCount do
if AnsiMatchText(ParamStr(i), ['-?', '/?', '-h', '/h', '-help']) then
begin
WriteLn('Erzeugt eine Liste aller Verzeichniss ab dem angegebenen Pfad (z.B. c:\).');
WriteLn('Die Ausgabe erfolgt in der definierten Outputdatei (z.B. Liste.txt).');
WriteLn('Über maximale Ordnertiefe (optional) kann die maximale Hierarchietiefe vorgegeben werden.');
WriteLn('Wird dieser Parameter nicht vorgegeben, wird immer bis zur maximalen Tiefe reportet.');
WriteLn;
WriteLn('Aufruf:');
WriteLn('Verzeichnisliste.exe -p:<Pfad> -o:<Outputdatei> -r:{<maximale Ordnertiefe>}');
Exit;
end
else
if (Length(ParamStr(i)) > 3) and ((ParamStr(i)[1] = '-') or (ParamStr(i)[1] = '/')) then
if ParamStr(i)[2] in ['p', 'P'] then
Verzeichnis := Copy(ParamStr(i), 3, Length(ParamStr(i)))
else
if ParamStr(i)[2] in ['o', 'O'] then
ProtDateiName := Copy(ParamStr(i), 3, Length(ParamStr(i)))
else
if ParamStr(i)[2] in ['r', 'R'] then
MaxRek := StrToInt(Copy(ParamStr(i), 3, Length(ParamStr(i))));
if (Verzeichnis <> '') and (Verzeichnis[Length(Verzeichnis)] <> '\') then
Verzeichnis := Verzeichnis + '\';
if ProtDateiName <> '' then
ProtDatei := TStringList.Create
else
ProtDatei := nil;
ProgressDirectory(Verzeichnis, MaxRek, '', ProtDatei);
if ProtDateiName <> '' then
begin
ProtDatei.SaveToFile(ProtDateiName);
ProtDatei.Free;
end;
end.