casi4711
Goto Top

Schleife mit Exist

Hallo an alles fleißigen Scripter,

ein Script soll eine Range von IPs abfragen und checken, ob ein bestimmtes Verzeichnis existiert, leider geht nicht so wie ich mir das vorgestellt habe, Wie muss es richtig heißen?


@echo off
for /l %%f in (170, 1, 173) do :Check
PAUSE

:Check
if exist \\192.168.100.%ff\c$\xy\ echo available xy
ELSE GOTO end
:end
PAUSE


Liebe Grüße Chris

Content-ID: 444261

Url: https://administrator.de/forum/schleife-mit-exist-444261.html

Ausgedruckt am: 27.12.2024 um 01:12 Uhr

139374
Lösung 139374 25.04.2019 aktualisiert um 13:21:58 Uhr
Goto Top
Moinsens.
why the hell kommst du auf %ff??
@echo off
for /l %%f in (170, 1, 173) do call :Check %%f
PAUSE
goto :eof
:Check
if exist "\\192.168.100.%1\c$\xy" echo xy available on 192.168.100.%1  
Tschö.

Wie muss es richtig heißen?
Man braucht es eigentlich nur nachlesen face-wink
https://ss64.com/nt/for.html
https://ss64.com/nt/call.html (Abschnitt: CALL a subroutine (:label))
casi4711
casi4711 25.04.2019 um 13:37:36 Uhr
Goto Top
Das %%f ist die variable, die an vierter Stelle der IP durchlaufen wird, geht bei mir sonst auch immer ?!?
139374
139374 25.04.2019 aktualisiert um 13:42:00 Uhr
Goto Top
Zitat von @casi4711:

Das %%f ist die variable,
%%a ja aber nicht %ff wie du oben ausgeschrieben hast!
die an vierter Stelle der IP durchlaufen wird, geht bei mir sonst auch immer ?!?
Du beendest die Schleife bereits in Zeile 2 und du übergibst %%f ja gar nicht an die Subroutine :Check, und in der Unterroutine wird der Parameter mit %1 angespochen!

Ohne Subroutine sieht das so aus, dann kannst du auch direkt mit %%f arbeiten:
for /l %%f in (170, 1, 173) do (
    if exist "\\192.168.100.%%f\c$\xy" echo xy available on 192.168.100.%%f  
)
casi4711
casi4711 25.04.2019 um 13:48:08 Uhr
Goto Top
Na ganz großes Kino, meine so hatte ich es vorher auch zwischenzeitlich und da lief es nicht. na vielleicht was vergessen oder der Dreher war da auch schon drin. Ok danke Dir noch mal und schöne Restwoche

Liebe Grüße


Chris
139374
139374 25.04.2019 aktualisiert um 13:51:28 Uhr
Goto Top
na vielleicht was vergessen oder
Klaaaaaaaar ....
casi4711
casi4711 25.04.2019 um 14:29:57 Uhr
Goto Top
Was natürlich noch schön wäre, wenn er mir sagt, wenn ein Server nicht erreichbar ist und dann nicht einfach, Verzeichnis vorhanden, geht das?
139374
139374 25.04.2019 aktualisiert um 14:45:17 Uhr
Goto Top
Selbst verständlich, einfach in der If Condition den else Teil hinzufügen
Das kannst du jetzt auch selbst
https://ss64.com/nt/if.html
Ansonsten am Freitag nochmal kommen.
Kraemer
Kraemer 25.04.2019 um 14:37:03 Uhr
Goto Top
Zitat von @casi4711:

Was natürlich noch schön wäre, wenn er mir sagt, wenn ein Server nicht erreichbar ist und dann nicht einfach, Verzeichnis vorhanden, geht das?
Guckst du dir Links, die man dir gibt, eigentlich auch mal an? https://ss64.com/nt/if.html
casi4711
casi4711 25.04.2019 um 15:10:45 Uhr
Goto Top
Sorry, da ging mein Post wohl parallel raus, dann schau ich mir mal den Link an. Klar weiß ich dass ich da noch weitere Bedingungen reinschreiben kann, meine Frage lautete aber wie ich abfragen kann, ob der Rechner läuft?
139374
139374 25.04.2019 aktualisiert um 15:15:57 Uhr
Goto Top
Ping

Suchfunktion bei dir im A....? Heut is Donnerstag nicht Freitag.

p.s. wenn du dabei bist, mach doch nochmal neuen Kaffee. Danke.
casi4711
casi4711 26.04.2019 aktualisiert um 07:10:05 Uhr
Goto Top
Moinsn,

also mein Batch sieht jetzt so aus, auch die grundsätzliche ergooglebare Erkenntnis über die Sterukltur von If Else Schleifen bringt mich da nicht unbedingt weiter. Was um alles in der Welt ist bei ELSE falsch geschrieben


@Echo off
for /l %%f in (22, 1, 255) do (
    (if exist "\\192.168.100.%%f\c$\Program Files (x86)\xy" echo 192.168.100.%%f xy vorhanden  
      if not exist "\\192.168.100.%%f\c$\Program Files (x86)\xy" echo 192.168.100.%%f Kein xy  

ELSE(
 echo 192.168.100.%%f PC aus )
)
 )
        
ECHO geschafft
 PAUSE

Liebe Grüße


Chris
139374
139374 26.04.2019 aktualisiert um 07:53:32 Uhr
Goto Top
Erkenntnis über die Sterukltur von If Else Schleifen bringt mich da nicht unbedingt weiter.
Absoluter Blödsinn sorry.
Du hast den dir gegebenen Artikel einfach überhaupt nicht bis zu Ende gelesen, denn dort hättest du lesen können das Klammern vor und hinter Else in einer Zeile stehen müssen und zwischen dem Wort Else und den Klammern mindestens ein Leerzeichen stehen muss!
Außerdem ist das zweite if stuss und vollkommen überflüssig, wofür gibt es wohl das if else?!
casi4711
casi4711 26.04.2019 um 08:25:06 Uhr
Goto Top
moin, musst dich nicht entschuldigen, bin keine Mimose, kann mit dem rauen bis arroganten Ton in manchen Foren leben (auch wenn es nicht mein Stil ist), solange die Hinweise sachdienlich sind. Das mit der selben Zeile hatte ich vorher schon ausprobiert, konntest du ja nicht wissen, aber da hatte er das Else auch bemängelt.

@Echo off
for /l %%f in (22, 1, 255) do (


(
    if exist "\\192.168.100.%%f\c$\Program Files (x86)\xy" (  
	echo 192.168.100.%%f xyvorhanden )
      if not exist "\\192.168.1008.%%f\c$\Program Files (x86)\xy" (  
	  echo 192.168.100.%%f Kein xy)
)

ELSE (echo 192.168.100.%%f PC aus )

)

 )
        
ECHO geschafft
 PAUSE

Außerdem sehe ich nur ein Else, vielleicht brauche ich ja eine Brille


Liebe Grüße

Chris
139374
139374 26.04.2019 aktualisiert um 09:16:21 Uhr
Goto Top
vielleicht brauche ich ja eine Brille
Die brauchst du in der Tat und zwar um meine Posts und unsere dir gegebenen Links richtig zu lesen, denn mehr hättest du nicht gebraucht..
Außerdem habe ich dir oben den Link zum Ping geschickt dem du offensichtlich auch nicht gefolgt bist denn ein if exist ist nicht geeignet um festzustellen ob ein Rechner an ist oder nicht, nur ob ein Verzeichnis existiert oder nicht, das sagt aber nicht aus das ein Rechner nicht an ist, ein Ping zwar auch nicht wenn die Firewall blockt, aber davon fange ich befindet gar nicht erst an, das führt eh zu nichts.
Also JA, du brauchst dringend eine Brille!
@echo off
set "NET=192.168.100"  
for /l %%f in (22, 1, 255) do (
    ping -n 1 %NET%.%%f | findstr /i "TTL" >nul 2>&1 && (  
        if exist "\\%NET%.%%f\c$\Program Files (x86)\xy" (  
            echo %NET%.%%f xy vorhanden
        ) else (
            echo %NET%.%%f xy nicht vorhanden, oder Freigabe geblockt.
        )
    ) || (
            echo %NET%.%%f not responding to ping.
    )
)
PAUSE

Als denn, frohes Copy n' Paste noch.

P.s. Versuchs mal ab und zu mit Manual lesen.
Btw. ist Batch was aus dem letzten Jahrhundert, heute nutzt man wenn schon Winblows, Powershell falls du das in deiner Höhle als Administrator als den du dich hier ausgibst, verpasst haben solltest.

Und tschüss.
casi4711
casi4711 26.04.2019 aktualisiert um 10:02:18 Uhr
Goto Top
Zur Info, Dein Script funktioniert, und im Grunde war das auch die eigentliche Kernfrage, was du mit
ping -n 1 %NET%.%%f | findstr /i "TTL" >nul 2>&1 && (
gelöst hast.


Ich bin übrigens Diplomkaufmann und kein Programmierer, sorry, stand aber nicht zur Auswahl bei der Anmeldung, sofern ich einer wäre würde ich bestimmt auch kein Forum aufsuchen. Sofern ich jemandem etwas aus meinem Bereich erkläre bleibe ich aber in der Regel sachlich und behandel die Leute nicht vom hohen Ross herab, zumindest ohne nicht genau zu wissen, was alles schon versucht wurde und was nicht. Und ja ich weiß auch dass Powershell die bessere Alternative ist.

Aber hat halt jeder seinen eigenen Stil Es ist immer ziemlich einfach, sich als Spezialist in einem Bereich, hinzustellen und alle anderen, die mit diesem Teilbereich nur zeitweise zu tun haben als geistig minderbemittelt hinzustellen. Aber dass muss wohl so sein in einem Forum ;), btw, ich nehms mit Humor.

Trotzdem Danke für deine Mithilfe und einen schönen Tag noch


Liebe Grüße Chris
mayho33
mayho33 26.04.2019 um 15:21:54 Uhr
Goto Top
Zitat von @139374:

Moinsens.
why the hell kommst du auf %ff??
> @echo off
> for /l %%f in (170, 1, 173) do call :Check %%f
> PAUSE
> goto :eof
> :Check
> if exist "\\192.168.100.%1\c$\xy" echo xy available on 192.168.100.%1  
> 
Tschö.

Wie muss es richtig heißen?
Man braucht es eigentlich nur nachlesen face-wink
https://ss64.com/nt/for.html
https://ss64.com/nt/call.html (Abschnitt: CALL a subroutine (:label))


Ein Grund warum ich Batch hasse. Unlogisch, nichts sagende Kürzel.... Boahhhhh!!! face-wink Ein Salut an jeden der sich das antut / antun kann!

Behaupte ja nicht dass VBS besser wäre, da gibt's aber wenigstens ein klein wenig "Object-Orientiert" Der aktuell Favorit ist PowerShell. Ab v3 GsD nicht mehr buggy. Oder C#
139374
139374 26.04.2019 aktualisiert um 15:38:58 Uhr
Goto Top
Meine Rede, aber versuch das mal den Kandidaten hier klar zu machen. Der Batch Krampf ist wie Windows selbst so in die Köpfe vieler eingebrannt das sie nicht mal mehr über den Tellerand schauen können.
Wer mit 25 noch Tretroller mit Stützrädern fährt, lernt es halt nicht mehr auf das Fahrrad umzusteigen wenn die Lernbereitschaft nicht da ist.
mayho33
mayho33 26.04.2019 um 16:31:00 Uhr
Goto Top
Zitat von @139374:

Meine Rede, aber versuch das mal den Kandidaten hier klar zu machen. Der Batch Krampf ist wie Windows selbst so in die Köpfe vieler eingebrannt das sie nicht mal mehr über den Tellerand schauen können.
Wer mit 25 noch Tretroller mit Stützrädern fährt, lernt es halt nicht mehr auf das Fahrrad umzusteigen wenn die Lernbereitschaft nicht da ist.

Dafür gibts glatt ein Herzchen!