WinFuture-Forum.de: Netzwerkabfrage nach verzeichnis als Batch - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
  • 2 Seiten +
  • 1
  • 2

Netzwerkabfrage nach verzeichnis als Batch


#1 Mitglied ist offline   casi4711 

  • Gruppe: aktive Mitglieder
  • Beiträge: 34
  • Beigetreten: 26. April 19
  • Reputation: 0

geschrieben 26. April 2019 - 21:46

Hallo allerseits,

ich möchte gerne eine Abfrage im Netzwerk vornehmen, ob auf den Rechnern im Verzeichnis Programme oder Programme x86 ein Verzeichnis xy existiert, mit einem Verzeichnis habe ich dass jetzt hinbekommen, aber leider keine oder Abfrage, wie kann ich das am besten bewerkstelligen. Das Script soll mir sagen, ob das Verzeichnis existiert, oder nicht, bzw. der Rechner nicht erreichbar ist. Bisher habe ich folgendes: Vielleicht wäre ja ein Oder konstrukt mit Sprungmarken sinnvoll

@Echo Off
set "NET=192.168.178"

for /l %%f in (21, 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
			if exist "\\%NET%.%%f\c$\Program Files\xy" (
            echo %NET%.%%f xy vorhanden
		
        )
        ) else (
            echo %NET%.%%f xy nicht vorhanden
        )
    ) || (
            echo %NET%.%%f Host aus / Nicht erreichbar
    )
)
PAUSE




danke im V.

Gruss

Chris
0

Anzeige



#2 Mitglied ist offline   MasterP82 

  • Gruppe: aktive Mitglieder
  • Beiträge: 221
  • Beigetreten: 30. Juni 12
  • Reputation: 10

geschrieben 27. April 2019 - 06:15

Was funktioniert und was funktioniert nicht? der Teilsatz "aber leider keine oder Abfrage" verwirrt mich
So wie es jetzt ist, funktioniert es ja schon etwas bei mir:
192.168.0.1 xy nicht vorhanden
192.168.0.2 xy nicht vorhanden
192.168.0.3 Host aus / Nicht erreichbar
192.168.0.4 Host aus / Nicht erreichbar
192.168.0.5 xy nicht vorhanden
192.168.0.6 xy vorhanden
192.168.0.7 xy nicht vorhanden




Aber: Ist denn auf jeden Rechner im Netzwerk das Verzeichnis xy freigegeben? Deswegen findet er bei mir nur auf der .6 das Verzeichnis.
Deine Abfrage verstehe ich auch nicht: wenn das Verzeichnis im x86 existiert (64-bit Windows), dann prüfst du ob es auch im anderen Verzeichnis existiert?! Sollte nicht beides unabhängig voneinander geprüft werden?

Ich habe es mal ein wenig umgebaut:
@Echo Off
setlocal enableextensions EnableDelayedExpansion
set "NET=192.168.178"

for /l %%f in (21, 1, 255) do (
    ping -n 1 -w 10 %NET%.%%f>nul 2>&1 && ( 
          set "str=%NET%.%%f xy nicht vorhanden"
          if exist "\\%NET%.%%f\c$\Program Files (x86)\xy" set "str=%NET%.%%f xy vorhanden"
          if exist "\\%NET%.%%f\c$\Program Files\xy" set "str=%NET%.%%f xy vorhanden"
          echo !str!
        ) || (
          echo %NET%.%%f Host aus / Nicht erreichbar
        )
)
PAUSE

Dieser Beitrag wurde von MasterP82 bearbeitet: 27. April 2019 - 15:56

0

#3 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 27. April 2019 - 08:00

Paßt denn das mit der SET-Syntax? Eigentlich ist die falsch.

SET variable="WERT".

Und dabei noch aufpassen, denn die Anführungszeichen sind eigentlich auch noch zuviel und werden in SET nicht benötigt; daher, wenn man die bei SET x=... verwendet, diese dann im späteren Gebrauch mit %~x entfernen (=> der Variable eine Tilde vorstellen).

Sonst hat man irgendwann in %x sowas wie """"C:\Program Files"\"Pfad\Datei"."Endung""" .

Von der Prozeßlogik mal abgesehen scheint es ansonsten stimmig. Aber bedenken, daß das Script mit einem Benutzer in der Administratorengruppe ausgführt werden muß: nur die haben Zugriff auf C$ .

Plus, evtl. blockiert irgendwo eine Firewall.


Außerdem muß man bei Pings nicht auf TTL im Ergebnis prüfen. Man kann die Anzahl der Pings einschränken (<4) und Ping liefert einen Errorlevel ungleich 0, wenn der Host nicht erreichbar war.

Dieser Beitrag wurde von RalphS bearbeitet: 27. April 2019 - 08:04

"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#4 Mitglied ist offline   MasterP82 

  • Gruppe: aktive Mitglieder
  • Beiträge: 221
  • Beigetreten: 30. Juni 12
  • Reputation: 10

geschrieben 27. April 2019 - 15:55

C:\>set a="23"
C:\>echo %a%
"23"
C:\>set "a=23"
C:\>echo %a%
23

genau deswegen so geschrieben, und die Anführungszeichen wegen der Leerzeichen


Übrigens sind die Anzahl der Ping vom TO schon auf eins eingeschränkt, ich habe noch die Wartezeit verkürzt
0

#5 Mitglied ist offline   casi4711 

  • Gruppe: aktive Mitglieder
  • Beiträge: 34
  • Beigetreten: 26. April 19
  • Reputation: 0

geschrieben 27. April 2019 - 16:05

Also danke noch mal für das Feedback,

zum einen, der Setwert ist schon richtig, die Rechner fangen schon mir 192.168.100 an, Das Script läuft sonst auch schon, Firewalls sind abgestellt, alles bedacht. Mein Problem war nur, wie ich die beiden IFs in eine ODER Logik bekomme, ich will nicht dass er sagt Verzeichnis nicht vorhanden, obwohl es in dem anderen drin ist, ich möchte auch keine Doppelauflistung, falls das Verzeichnis in beiden vorkommt, nicht mehr und nicht weniger. Hoffe dass war so weit jetzt deutlich.

Liebe Grüße und schönen Samstag noch


Chris
0

#6 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 27. April 2019 - 18:47

Wenn's so funktioniert, dann ist doch gut - allerdings sind die " bei SET trotzdem überflüssig. Auch und insbesondere dann, wenn da Leerzeichen irgendwo drinstehen. :blush:

Was natürlich zugegeben etwas inkonsistent ist, da ansonsten überall danach geschrien wird.

Aber das auch nur als Hinweis. Wenn es tut, dann bedarf es natürlich keiner Änderung.
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#7 Mitglied ist offline   casi4711 

  • Gruppe: aktive Mitglieder
  • Beiträge: 34
  • Beigetreten: 26. April 19
  • Reputation: 0

geschrieben 27. April 2019 - 19:26

Du hast nicht richtig gelesen, es funktioniert eben noch nicht so wie ich das möchte, es soll eine ENTWEDER ODER Verknüfung realsiert werden, d.h. er soll sagen wenn er in dem einem Programme ordner was findet ODER in dem Prrogramme x64, dies sind unterschiedliche Ordner, die IFS stellen lediglich eine Und Verbindung her, wie mir wohl jeder bestätigen wird. Ich scheine mich so kompliziert auszudrücken, dass immer nur der erste Satz gelesen wird, dabei stand ja in meinem Hilfegegesuch bereits alles drin.

Liebe Grüße

Chris

Bei Set hab ich lediglich eine Variable definiert, weil ich das nicht immer schreiben wollte, bin halt schreibfaul.
0

#8 Mitglied ist offline   der dom 

  • Gruppe: aktive Mitglieder
  • Beiträge: 578
  • Beigetreten: 14. Juni 12
  • Reputation: 73
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Mein Haus, meine IT, Programmierung

geschrieben 27. April 2019 - 20:10

Beitrag anzeigenZitat (casi4711: 27. April 2019 - 16:05)

Also danke noch mal für das Feedback,

zum einen, der Setwert ist schon richtig, die Rechner fangen schon mir 192.168.100 an, Das Script läuft sonst auch schon, Firewalls sind abgestellt, alles bedacht. Mein Problem war nur, wie ich die beiden IFs in eine ODER Logik bekomme, ich will nicht dass er sagt Verzeichnis nicht vorhanden, obwohl es in dem anderen drin ist, ich möchte auch keine Doppelauflistung, falls das Verzeichnis in beiden vorkommt, nicht mehr und nicht weniger. Hoffe dass war so weit jetzt deutlich.

Liebe Grüße und schönen Samstag noch


Chris



Beitrag anzeigenZitat (casi4711: 27. April 2019 - 19:26)

Du hast nicht richtig gelesen, es funktioniert eben noch nicht so wie ich das möchte, es soll eine ENTWEDER ODER Verknüfung realsiert werden, d.h. er soll sagen wenn er in dem einem Programme ordner was findet ODER in dem Prrogramme x64, dies sind unterschiedliche Ordner, die IFS stellen lediglich eine Und Verbindung her, wie mir wohl jeder bestätigen wird. Ich scheine mich so kompliziert auszudrücken, dass immer nur der erste Satz gelesen wird, dabei stand ja in meinem Hilfegegesuch bereits alles drin.

Liebe Grüße

Chris

Bei Set hab ich lediglich eine Variable definiert, weil ich das nicht immer schreiben wollte, bin halt schreibfaul.



Bleib mal locker oder such dir in einem anderen Forum Hilfe. Schau auf deine Aussagen - es liest sich so als ob das laufen würde. Wir helfen hier freiwillig und jeder opfert seine Freizeit für die Antworten - ein bisschen mehr Danke für die bisherigen Mühen als "lies mal richtig" wären da schon angebracht.

Schau hier

Im Batch gibt's kein reines If OR.

Bau 2 If Abfragen nacheinander für den x86 Ordner und für den x64 Ordner und setze dann die Variablen entsprechend sofern du für eine Abfrage ein True zurückgegeben bekommst.

Dann hast du deine EINE Antwort für den Ordner.
Mit allem, was du tust, machst du offenkundig, mit welcher Einstellung du durch's Leben gehst. -- Steffen Glückselig
0

#9 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 27. April 2019 - 21:49

Antivalenz in Batch geht mit IF-THEN-ELSE.

Ob man das in dem Fall machen muß, weiß ich nicht, aber sinngemäß:

IF EXIST PF64\xyz  (
 64bit code gefunden
) ELSE (
 IF EXIST PF32\xyz (
  # 64bit existiert NICHT, aber 32bit code ist da
) ELSE (
 REM weder das eine noch das andere existiert
)
) 


Dieser Beitrag wurde von RalphS bearbeitet: 27. April 2019 - 21:50

"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#10 Mitglied ist offline   der dom 

  • Gruppe: aktive Mitglieder
  • Beiträge: 578
  • Beigetreten: 14. Juni 12
  • Reputation: 73
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Mein Haus, meine IT, Programmierung

geschrieben 27. April 2019 - 22:00

@RalphS: If else ist logisch - das passt auch - er / sie fragte explizit nach OR und bei der Art wie gefragt und dann noch kritisiert wurde bekommt man auch die passende Antwort.

Warum frage ich mich bloß warum die Leute heute nicht den neusten Stand der Dinge benutzen (Powershell, kleine C# Programme mittels Mono).....
Mit allem, was du tust, machst du offenkundig, mit welcher Einstellung du durch's Leben gehst. -- Steffen Glückselig
0

#11 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 27. April 2019 - 23:21

Tschaaaa :P

Ich bin da schon verschrien. Hast Du ja sicher gemerkt. Mir issues inzwischen wumpe. Wer will, will. Wer nicht, nicht. So einfach. ;)
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#12 Mitglied ist offline   MasterP82 

  • Gruppe: aktive Mitglieder
  • Beiträge: 221
  • Beigetreten: 30. Juni 12
  • Reputation: 10

geschrieben 28. April 2019 - 05:46

hier nochmals eine Variante, ohne die Anführungsstriche, weil RalphS sie ja nicht mag, und mit ODER-Logik.
Die Variable !nicht! wird geleert, sobald ein Verzeichnis existiert


@Echo Off
setlocal enableextensions EnableDelayedExpansion
set "NET=192.168.178"

for /l %%f in (21, 1, 255) do (
    ping -n 1 -w 10 %NET%.%%f>nul 2>&1 && ( 
          set nicht= nicht
          if exist "\\%NET%.%%f\c$\Program Files (x86)\xy" set nicht=
          if exist "\\%NET%.%%f\c$\Program Files\xy" set nicht=
          echo %NET%.%%f xy!nicht! vorhanden"
        ) || (
          echo %NET%.%%f Host aus / Nicht erreichbar
        )
)
PAUSE

0

#13 Mitglied ist offline   casi4711 

  • Gruppe: aktive Mitglieder
  • Beiträge: 34
  • Beigetreten: 26. April 19
  • Reputation: 0

geschrieben 28. April 2019 - 15:37

Hallo Leute, ich bin locker, nur Tatsachen sollten schon Tatsachen bleiben, ich hatte das geschrieben. Da kommt man sich natürlich schon etwas veralbert vor;)

Zitat

aber leider keine oder Abfrage, wie kann ich das am besten bewerkstelligen. Das Script soll mir sagen, ob das Verzeichnis existiert, oder nicht, bzw. der Rechner nicht erreichbar ist. Bisher habe ich folgendes: Vielleicht wäre ja ein Oder konstrukt mit Sprungmarken sinnvoll


Das es kein OR im Batch gibt hatte ich auch anklingen lassen, deswegen hatte ich das auch entsprechend formuliert

Zitat

ein Oder konstrukt
, sollte heissen eine Art wie man das hinbekommen kann.

So dann werde ich mich mal den konstruktiven Beiträgen dazu widmen und bedanke mich recht herzlichst. Werde euch dann am Montag berichten ob es geklappt hat.
0

#14 Mitglied ist offline   casi4711 

  • Gruppe: aktive Mitglieder
  • Beiträge: 34
  • Beigetreten: 26. April 19
  • Reputation: 0

geschrieben 28. April 2019 - 15:48

@der dom,

ich habe hier lieb und nett gefragt. etwas anderes würde mir meine gute Kinderstube auch verbieten. Nur Fakt scheint zu sein. dass sich viele in Foren wie diesen, anwesende ausgenommen, sich nicht auf die eigentlichen Fragen konzentrieren sondern lediglich Opfer (fach unkundige) suchen, Menschen, die in diesem speziellen Bereich eben keine Experten sind, diese werden dann immer erst mal beleidigt, oder gar die eigentliche Aufgabe erst mal in Frage gestellt. Auf die Art und Weise werden Foren wie diese unnötig aufgebläht, mit dem Zwecke der individuellen Befriedigung der eigenen Eitelkeiten.Dieses wird auf Kurz oder Lang der TOD aller Foren sein, da sich niemand mehr trauen wird, sich an ein Forum wie dieses zu wenden. Ich bin jedenfalls nicht derjenige gewesen der in irgendeiner Form einen Rauen Ton mit in die Sache reingebracht hat.

@Master: scheint übrigens ein sehr guter Ansatz zu sein mit Set nicht, recht herzlichen Dank

Einen Schönen Restsonntag noch

Dieser Beitrag wurde von casi4711 bearbeitet: 28. April 2019 - 16:04

0

#15 Mitglied ist offline   der dom 

  • Gruppe: aktive Mitglieder
  • Beiträge: 578
  • Beigetreten: 14. Juni 12
  • Reputation: 73
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Mein Haus, meine IT, Programmierung

geschrieben 28. April 2019 - 17:49

Nichts für ungut - es las sich so, als wärest du leicht säuerlich - ich zitiere deinen Beitrag nicht nochmal da das nicht gerne gesehen wird.

Um welches Verzeichnis handelt es sich denn? Wie groß ist das Netzwerk? Privat oder Unternehmen? Man könnte sonst ein Workaround schaffen - wäre glaub ich auch in Richtung Firewall schmackhafter.

Eine andere Frage hätte ich jedoch - muss es unbedingt ein Batch-File sein? Ich erwähnte weiter oben dass es mich wundert warum viele nicht einfach die Powershell nutzen - die ist mächtiger und, ACHTUNG persönliche Meinung, weitaus leichter zu handeln.

@RalphS - ich bin jetzt schon so lange hier (das Reg-Datum kann man ruhig ignorieren) da kennt man die meisten Stammbesucher hier ;-).
Mit allem, was du tust, machst du offenkundig, mit welcher Einstellung du durch's Leben gehst. -- Steffen Glückselig
0

Thema verteilen:


  • 2 Seiten +
  • 1
  • 2

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0