Mit dieser Konsolenanwendung kann man sich auflisten lassen, in welchen Pfaden eine Datei liegt. Beispiel für den Aufruf:

Zitat von
pathof:
pathof dcc32.exe
C:\Programme\Borland\
BDS\4.0\Bin\dcc32.exe
C:\Programme\Borland\Delphi7\Bin\dcc32.exe
Das kann wichtig sein, wenn man mehrere Installationen besitzt und diese z.b. aus einer Batchdatei heraus aufrufen möchte.
[edit]Man kann jetzt auch einen Dateinamen ohne Extension übergeben - in diesem Fall wird die in PATHEXT hinterlegte Liste von Extensions für jeden Pfad-Eintrag abgearbeitet.[/edit]
Hier der Code:
Delphi-Quellcode:
program Pathof;
{$APPTYPE CONSOLE}
{$WARNINGS OFF}
uses
SysUtils,
Windows;
type
TStringArray = Array of string;
procedure SplitStringByDelimiter(Value : string; Delimiter : char; var AStrings : TStringArray);
var
P, P1 : PChar;
S : string;
begin
P := PChar(Value);
while P^ <> #0 do
begin
P1 := P;
while (P^ <> Delimiter) and (P^ <> #0) do
P := CharNext(P);
SetString(S, P1, P-P1);
Setlength(AStrings, length(AStrings)+1);
AStrings[high(AStrings)] := S;
P := CharNext(P);
end;
end;
var
Found : boolean;
iPath, iExt : integer;
FilePath, FileName, FileExt : string;
PathList, PathExts : TStringArray;
begin
if (ParamCount = 0) then
WriteLn('Usage : Pathof <filename[.extension]>')
else
begin
FileName := ExtractFileName(ParamStr(1));
FileExt := ExtractFileExt(FileName);
if FileExt = '' then
FileExt := GetEnvironmentVariable('pathext');
SplitStringByDelimiter(FileExt, ';', PathExts);
SplitStringByDelimiter(GetEnvironmentVariable('path'), ';', PathList);
for iPath := 0 to High(PathList) do
begin
PathList[iPath] := IncludeTrailingPathDelimiter(PathList[iPath]);
for iExt := 0 to High(PathExts) do
begin
FilePath := PathList[iPath]+ChangeFileExt(Filename,PathExts[iExt]);
if fileexists(FilePath) then
begin
Found := true;
WriteLn(FilePath);
end;
end;
end;
if not Found then
Writeln(Filename+' not found in path'#7);
end;
end.