19 Stimmen

Auffinden einer Datei im Pfad

Weiß jemand, wie man den Speicherort einer Datei bestimmen kann, die sich in einem der durch die Umgebungsvariable PATH angegebenen Ordner befindet, ohne ein dir filename.exe /s aus dem Root-Ordner auszuführen?

Ich weiß, dass dies den Rahmen einer Programmierfrage sprengt, aber dies ist nützlich für Fragen im Zusammenhang mit der Bereitstellung, außerdem muss ich die Abhängigkeiten einer ausführbaren Datei untersuchen :-)

-1voto

Scott Weinstein Punkte 18520

Nur so zum Spaß hier eine Einzeiler-Powershell-Implementierung

 function PSwhere($file) { $env:Path.Split(";") | ? { test-path $_\$file* } }

0 Stimmen

Das funktioniert nicht, da Pfade in PATH können enthalten ; auch (und werden dann zitiert).

-1voto

Richard T Punkte 4374

Zusätzlich zu den Dienstprogrammen "which" (MS Windows) und "where" (Unix/Linux) habe ich mein eigenes Dienstprogramm geschrieben, das ich "findinpath" nenne. Es findet nicht nur die ausführbare Datei, die ausgeführt werden würde, wenn sie dem Befehlszeileninterpreter (CLI) übergeben würde, findet er alle Übereinstimmungen und gibt die Pfad-Suchreihenfolge zurück, so dass Sie Probleme mit der Pfadreihenfolge finden können. Außerdem gibt mein Dienstprogramm nicht nur ausführbare Dateien zurück, sondern auch alle Übereinstimmungen mit der Dateispezifikation, um die Fälle abzufangen, in denen eine gewünschte Datei nicht wirklich ausführbar ist.

Ich habe auch eine Funktion hinzugefügt, die sich als sehr nützlich erwiesen hat; das Flag -s veranlasst das Programm, nicht nur den Systempfad zu durchsuchen, sondern alles auf der Systemplatte, bekannte Benutzerverzeichnisse ausgeschlossen. Ich habe festgestellt, dass diese Funktion bei Aufgaben der Systemadministration unglaublich nützlich ist...

Hier ist die Ausgabe der "Verwendung":

usage: findinpath [ -p <path> | -path <path> ] | [ -s | -system ] <file>
   or  findinpath [ -h | -help ]

where: <file> may be any file spec, including wild cards

       -h or -help returns this text

       -p or -path uses the specified path instead of the PATH environment variable.

       -s or -system searches the system disk, skipping /d /l/ /nfs and /users

Es ist nicht schwer, ein solches Programm zu schreiben, und ich überlasse es dem Leser als Übung. Auf Anfrage kann ich mein Skript auch hier veröffentlichen - es ist in "bash" geschrieben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X