klausph
Goto Top

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 face-wink


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)

Content-ID: 254972

Url: https://administrator.de/contentid/254972

Ausgedruckt am: 22.11.2024 um 20:11 Uhr

Endoro
Lösung Endoro 16.11.2014 aktualisiert um 20:28:56 Uhr
Goto Top
Hey,
mein Vorschlag:
where sfk.exe >nul 2>&1 && echo sfk.exe gefunden || echo sfk.exe nicht gefunden
Könnte sein, dass where nicht in XP läuft.
Gruss, Endoro
klausph
klausph 16.11.2014 um 18:43:29 Uhr
Goto Top
oh. prima.
ein externes kommando. kannte ich nicht. ja, wxp kennt es nicht (gerade gestetet...)
hm. ich werd' mal mit where jetzt was anfangen.... es ist ziemlich unwahrscheinlich, daß mein skript auf wxp laufen muss....
TROTZDEM wäre es sehr charmant, wenn man mit der cmd-shell eine lösung hätte. dann wäre es mehr oder weiniger betriebssystem-unabhängig...
mal schauen.
bis gleich!
gruß aus radeberg
vom k.l.
Biber
Lösung Biber 16.11.2014 aktualisiert um 20:29:02 Uhr
Goto Top
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:
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]
bastla
Lösung bastla 16.11.2014 aktualisiert um 20:29:04 Uhr
Goto Top
Hallo klausph!

Kompliziert?
for %%n in ("sfk.exe") do echo "%%~$Path:n"|findstr /ie "sfk.exe">nul && (  
    echo Gefunden
) || (
    echo Leider nein
)
Anstelle der "echo"-Zeilen bieten sich vermutlich passende "goto" an ...

Grüße
bastla

[Edit] @ Biber: Da wären wir uns ja wieder einmal ziemlich einig ... face-smile [/Edit]
klausph
klausph 16.11.2014 aktualisiert um 20:16:59 Uhr
Goto Top
danke ihr Lieben!
mittlerweile habe ich mir was für mein script zusammengeschustert:

 
@echo off
rem die konstruktion mit where.exe ist von "endoro" aus dem forum auf administrator.de vom 16.11.2014 um 18.13Uhr  
rem die abfrage nach den errorleveln ist aus dem buch von Alois Kneisle "Batch-Betrieb ..."(Hanser 1996) S.126  
rem nebenbei: das halte ich für ein wichtiges (altes!) grundlagenwerk, um die "batchsprache" zu erlernen.  

where /Q sfk.exe
for %%x In (0 1) do if errorlevel %%x set sfklevel=%%x

rem beide nachfolgenden echo 's sind NICHT wichtig. nur spielerei ;-)  
rem ich SEHE immer gerne was.....
if %sfklevel%]==0] echo alles prima. sfk gibt es!
if not %sfklevel%]==0] echo chef. problem!. sfk gibt nicht!

rem auch DAS ist NICHT wichtig. nur für die optik ;-)
echo sfk.exe liegt auf:
for %%n in ("sfk.exe") do echo "%%~$Path:n"  
pause
rem das WICHTIGE ist, ich habe eine set-variable gefüllt: die sfklevel mit einer 1 oder einer 0. das kann ich abfragen.

[die pause muß natürlich weg]


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


danke und viele grüße
euer klaus(i)
Endoro
Endoro 16.11.2014 aktualisiert um 23:03:09 Uhr
Goto Top
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.

Naja, find und findstr gehen nicht einfach verloren. Fall doch, ist es Zeit für eine Windows-Reinstallation.
Übrigens geht mit Batch quasi alles face-smile

for %n in ("sfk.exe") do @if not "%~$Path:n"=="" (echo Gefunden!) else echo Nicht gefunden!  
Gruss, Endoro
klausph
klausph 18.11.2014 um 13:08:32 Uhr
Goto Top
guten morgen enduro
ich muss da noch nen nachsatz nachschieben.
es ging mir nicht um die kontrolle des "PATH", was c:\windows\system usw usw anging.

folgendes nachträgliches:
habe da ein skript, was ca 12 Mill. datensätze verwurstet. da gehts um datenbewegungen von jeweils 10 GB face-wink
eine optische kontrolle ist da ganz schwer. ich war fast am ende meiner tests -diegehen schon 3 monate so! face-wink
irgendwann DURCH zufall habe ich gemerkt, daß ein such&ersetz-tool gar nicht angesprungen war. das script war so gestaltet, daß die ausgangsdatei überschrieben wurde face-wink
es musste durch irgendwas(?) passiert sein, daß eben c:\programme (x86)\tools aus dem %PATCH% rausgekickt wurden. keiner hats gemerkt!
deshalb muss ich den path auf das vorhandensein eines bestimmten tools überprüfen.
alternativ könnte man natürlich c:\programme (x86)\tools\sfk.exe schreiben. dazu bin ich aber zu faul face-wink
das war der hinter(n)grund
grüße aus radeberg
vom klaus(i)