Wie kann man eine datei im PATH abfragen?
guten tag
dank friemler und seinem for-tutorial bin ich schon weit gekommen.
meine aufgabe:
gibt es die datei sfk.exe im path?
wenn ja, mache weiter.
wenn nein, gebe ne warnung aus und stoppe.
friemler hatte die for-schleife mit echo:.
for %%n in ("sfk.exe") do echo "%%~$Path:n"
oder einfacher:
for %%n in ("sfk.exe") do echo "%%~n"
Meine Ansätze sind für den Einsatz IN einer bat/cmd gestrickt, deshalb das Doppel %. das hat schon Weile gedauert, bis ich friemlers Ansatz verstanden habe und auf den Einsatz in der bat/cmd umgemünzt habe
das ganze kann man auch mit call machen:
for %%n in ("sfk.exe") do call "%%~$Path:n"
oder:
for %%n in ("sfk.exe") do call "%%~n"
naja. aber wie werte ich das aus?
mit errorlevel habe ich das schon versucht.
if errorlevel 0 goto 123 (also erfolg)
if errorlevel 1 goto 456 (ist nicht im path)
das klappt nicht. auf echo/call kann ich kein errorlevel auswerten. oder denke ich falsch?
wie ihr seht, ist alles mit "" versetzt, weil sfk.exe HIER liegt:
c:\programme (x86)\Tools [nach programme ist einmal LEER]
eigentlich ist doch aufgabe eine sehr einfache, oder?
was habe ich falsch gemacht?
ein lösungsansatz fällt mir noch ein:
man könnte so vorgehen
for %%n in ("sfk.exe") do echo "%%~$Path:n" > irgendwas.txt
dann irgendwas.txt auf den korrekten inhalt "c:\programme (x86)\Tools\sfk.exe" durchsuchen. und auf "gefunden" oder "nicht gefunden" abfragen, und entsprechend reagieren lassen. ich weiss es nicht, ist das nicht VIEL zu kompliziert?
danke bei mitdenken
euer klaus(i)
dank friemler und seinem for-tutorial bin ich schon weit gekommen.
meine aufgabe:
gibt es die datei sfk.exe im path?
wenn ja, mache weiter.
wenn nein, gebe ne warnung aus und stoppe.
friemler hatte die for-schleife mit echo:.
for %%n in ("sfk.exe") do echo "%%~$Path:n"
oder einfacher:
for %%n in ("sfk.exe") do echo "%%~n"
Meine Ansätze sind für den Einsatz IN einer bat/cmd gestrickt, deshalb das Doppel %. das hat schon Weile gedauert, bis ich friemlers Ansatz verstanden habe und auf den Einsatz in der bat/cmd umgemünzt habe
das ganze kann man auch mit call machen:
for %%n in ("sfk.exe") do call "%%~$Path:n"
oder:
for %%n in ("sfk.exe") do call "%%~n"
naja. aber wie werte ich das aus?
mit errorlevel habe ich das schon versucht.
if errorlevel 0 goto 123 (also erfolg)
if errorlevel 1 goto 456 (ist nicht im path)
das klappt nicht. auf echo/call kann ich kein errorlevel auswerten. oder denke ich falsch?
wie ihr seht, ist alles mit "" versetzt, weil sfk.exe HIER liegt:
c:\programme (x86)\Tools [nach programme ist einmal LEER]
eigentlich ist doch aufgabe eine sehr einfache, oder?
was habe ich falsch gemacht?
ein lösungsansatz fällt mir noch ein:
man könnte so vorgehen
for %%n in ("sfk.exe") do echo "%%~$Path:n" > irgendwas.txt
dann irgendwas.txt auf den korrekten inhalt "c:\programme (x86)\Tools\sfk.exe" durchsuchen. und auf "gefunden" oder "nicht gefunden" abfragen, und entsprechend reagieren lassen. ich weiss es nicht, ist das nicht VIEL zu kompliziert?
danke bei mitdenken
euer klaus(i)
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 254972
Url: https://administrator.de/contentid/254972
Ausgedruckt am: 22.11.2024 um 20:11 Uhr
7 Kommentare
Neuester Kommentar
Moin klausph,
eine Errorlevel-Auswertung auf "Echo" kannst du zwar machen, aber da "echo" immer Errorlevel 0 zurückgibt, besser so:
Beispiel am CMD-Prompt:
Statt "notepad.exe" in deinem Fall "sfk.exe", statt "echo is da"/"echo is nich da" was immer sinnvoll sein mag.. ein Befehl, ein Goto.., ein Call:Sub.
Im Batch wieder die %-Zeichen verdoppeln.
Grüße
Biber
[Edit @ bastla. Moin, ja, ich denke, da liegen wir nicht weit auseinander.. [/Edit]
eine Errorlevel-Auswertung auf "Echo" kannst du zwar machen, aber da "echo" immer Errorlevel 0 zurückgibt, besser so:
Beispiel am CMD-Prompt:
for %n in ("notepad.exe") do @echo "%~$Path:n"|find /i "notepad.exe">nul && echo is da
for %n in ("notepad.exe") do @echo "%~$Path:n"|find /i "notepad.exe">nul || echo is nich da
Statt "notepad.exe" in deinem Fall "sfk.exe", statt "echo is da"/"echo is nich da" was immer sinnvoll sein mag.. ein Befehl, ein Goto.., ein Call:Sub.
Im Batch wieder die %-Zeichen verdoppeln.
Grüße
Biber
[Edit @ bastla. Moin, ja, ich denke, da liegen wir nicht weit auseinander.. [/Edit]
Hallo klausph!
Kompliziert?
Anstelle der "
Grüße
bastla
[Edit] @ Biber: Da wären wir uns ja wieder einmal ziemlich einig ... [/Edit]
Kompliziert?
for %%n in ("sfk.exe") do echo "%%~$Path:n"|findstr /ie "sfk.exe">nul && (
echo Gefunden
) || (
echo Leider nein
)
echo
"-Zeilen bieten sich vermutlich passende "goto
" an ...Grüße
bastla
[Edit] @ Biber: Da wären wir uns ja wieder einmal ziemlich einig ... [/Edit]
Zitat von @klausph:
@Biber und @bastla. danke an Euch! find.exe und findstr.exe sind externe befehle, genauso wie where.exe . es scheint also nix zu
geben, was PUR auf cmd.exe beruht. ich habe diese lösungen sehr gerne, die auf einer "nackten" cmd.exe beruhen.
die gefahr, daß externe befehle untergegangen sind, oder eben fehlen, ist wohl immer größer.
@Biber und @bastla. danke an Euch! find.exe und findstr.exe sind externe befehle, genauso wie where.exe . es scheint also nix zu
geben, was PUR auf cmd.exe beruht. ich habe diese lösungen sehr gerne, die auf einer "nackten" cmd.exe beruhen.
die gefahr, daß externe befehle untergegangen sind, oder eben fehlen, ist wohl immer größer.
Naja,
find
und findstr
gehen nicht einfach verloren. Fall doch, ist es Zeit für eine Windows-Reinstallation.Übrigens geht mit Batch quasi alles
for %n in ("sfk.exe") do @if not "%~$Path:n"=="" (echo Gefunden!) else echo Nicht gefunden!