DAU-JONES 10 Geschrieben 17. September 2003 Melden Teilen Geschrieben 17. September 2003 Hallo Leute! Ich suche nach einer Möglichkeit mir den UNC Pfad eines Netzlaufwerkes ausgeben zu lassen. Der Befehl "net" bietet zwar mannigfaltige Möglichkeiten der Informationsbeschaffung, aber ich habe leider noch nichts gefunden, das genau meinen Anforderungen entsprechen würde. Ziel Soll es sein per Batch alle Netzlaufwerke aufzulisten und den dazugehörigen UNC-Pfad mittels Anfügeumleitung in eine Textdatei zur weiteren Verarbeitung abzulegen. Leider sind die Möglichkeiten Strings per Batch zu manipulieren relativ mager, sodass ich eigentliche nur die UNC Pfade zeilenweise in der Textdatei haben will. Zitieren Link zu diesem Kommentar
auer 10 Geschrieben 17. September 2003 Melden Teilen Geschrieben 17. September 2003 Mit net view bzw. net view \\Rechnername bekommst Du eigentlich ziemlich viel raus. Der Output läßt sich mit if in alle Einzelteile zerlegen, das kann geschachtelt und anschließend gleich weiterverarbeitet werden, ohne daß Du dies erst in eine Datei schreibst und diese erneut ausliest. ------------- Gruß, Auer Zitieren Link zu diesem Kommentar
DAU-JONES 10 Geschrieben 17. September 2003 Autor Melden Teilen Geschrieben 17. September 2003 Erstmal Danke für die schnelle Antwort Auer:) Net View hab ich schon durchgetestet. Damit bekomm ich leider nur die Namen der Freigaben auf beliebigen Rechnern (zumindest ist mir kein Parameter bekannt, der mir den UNC Pfad auspuckt). Ich brauche irgendeinen Befehl, der mir in der Ausgabe den UNC Pfad mit ausspuckt, den Rest kann ich dann selbst erledigen:) Als Abfrage parameter steht mir nur der Buchstabe des Netzlaufwerkes zur Verfügung. Zitieren Link zu diesem Kommentar
klausk 10 Geschrieben 17. September 2003 Melden Teilen Geschrieben 17. September 2003 Probiers mal mit for /f "Tokens=2-3 Delims=\ skip=6" %%i in ('net use') do set Freigabe=\\%%i\%%j Zitieren Link zu diesem Kommentar
real_tarantoga 11 Geschrieben 17. September 2003 Melden Teilen Geschrieben 17. September 2003 diese for-kombis bereiten mir immer bauchschmerzen :rolleyes: wisogedndasjetznichbeimir-grummel-??? Zitieren Link zu diesem Kommentar
DAU-JONES 10 Geschrieben 17. September 2003 Autor Melden Teilen Geschrieben 17. September 2003 Danke KlausK:) Das ist so ziemlich genau das, was ich brauche:) Mal eine Frage aus reinem Interesse:)Was genau macht diese Zeile? Das Ergebnis kenn ich ja jetzt:) Welcher Mechanismus steckt aber dahinter? Die Syntax ist für mich reichlich kryptisch. Das habe ich in der Art noch nicht gesehen. Edit: Ich hab es jetzt mal bei mehreren Laufwerken getestet und festgestellt, das mir der befehl immer nur den Pfad des ersten Netzlaufwerkes rausgibt. Anyway, das bekomm ich schon geregelt(hab mal vorhin "for /?" eingegeben) :) Allerdings bereitet mir die Tatsache, das "Freigabe=\\%%i\%%j" anscheinend nur zur Formatierung da ist ein wenig Kopfzerbrechen, da ich es oft mit UNC's zu tun habe, die sich wie folgt darstellen: \\byxxp3\tp\bl\ux\tr\install$ Das bedeutet, das ich im vorfeld nicht weiss wieviele teilsegmente der Pfad enthält. Diesbezüglich müsste ich das formatieren etwas dynamischer gestalten!? mit regards Zitieren Link zu diesem Kommentar
auer 10 Geschrieben 17. September 2003 Melden Teilen Geschrieben 17. September 2003 Die einzigst Doku ist if /? - da steht doch alles drin. [Edit] Blödsinn: Muß natürlich for /? heißen. Sprich: Von allen Dos-Befehlen gibt es mit Befehl /? Hilfen, mit Befehl /? > info.txt kann man sich dies in eine Textdatei schreiben - und dann viel probieren. ----------- Gruß, Auer Zitieren Link zu diesem Kommentar
klausk 10 Geschrieben 17. September 2003 Melden Teilen Geschrieben 17. September 2003 @DAU-JONES Frag mich nicht solche Sachen - ich nehme immer eine funktionierende For-Schleife und passe sie an. Die for-Schleife untersucht die Ausgabe des Befehls net use ab der 7. Zeile (skip=6), sucht nach dem Zeichen "\" (Delims=\) und übergibt die darauffolgenden Zeichen der 2. und 3. Fundstelle (Tokens=2-3) an die Variable %i bzw %j (%i wird bei jeder Fundstelle hochgezählt). @auer Meinst Du "for /?" @r_t Meine Bauchschmerzen gehen auch schon los :rolleyes: - welches Problem hast Du? Zitieren Link zu diesem Kommentar
real_tarantoga 11 Geschrieben 17. September 2003 Melden Teilen Geschrieben 17. September 2003 hab's: hab nur 2 der 3 %%i ersetzt gehabt, da fehlte das dritte %i :) :rolleyes: danke. Zitieren Link zu diesem Kommentar
klausk 10 Geschrieben 17. September 2003 Melden Teilen Geschrieben 17. September 2003 Original geschrieben von DAU-JONES ... Ich hab es jetzt mal bei mehreren Laufwerken getestet und festgestellt, das mir der befehl immer nur den Pfad des ersten Netzlaufwerkes rausgibt... Ich habs befürchtet, dass das nur mit dem ersten Netzlaufwerk funzt, ich schau auch mal, ob und was ich da noch an Optimierung leisten kann. Zitieren Link zu diesem Kommentar
DAU-JONES 10 Geschrieben 17. September 2003 Autor Melden Teilen Geschrieben 17. September 2003 Danke Klaus:) Ich werde mich morgen auf der Arbeit mal an eine vernünftige Batch für das Problem setzen. Werde das ergebnis auf jedenfall dann hier veröffentlichen:) Zitieren Link zu diesem Kommentar
auer 10 Geschrieben 17. September 2003 Melden Teilen Geschrieben 17. September 2003 @DAU-JONES: Deine Ergänzung läuft nun aber - fürchte ich - auf eine Begriffsvermischung hinaus. Bei \\byxxp3\tp\bl\ux\tr\install$ ist die Freigabe tp, der Rest ist der darunterliegende Pfad, wobei das letzte Verzeichnis 'zufälligerweise' wie eine versteckte Freigabe aussieht. Mit net use im Inneren des for - Ausdrucks liefert das Beispiel von @klausk immer nur Ausdrücke der Form \\Rechner\Freigabe, niemals etwas längeres. Falls Du mehrere Ausdrücke hintereinander verarbeiten möchtest, liefert Dir die Umgebungsvariable immer nur den ersten Ausdruck. Da ist eine doppelte for-Schleife notwendig: for /f "Skip=6 delims=: tokens=1-2" %%i in ('net use') do for /f %%m in ('echo %%j') do if not "%%m" == "ECHO" echo %%m Zunächst wird der Output von net use am Doppelpunkt in zwei Teile getrennt, der zweite Teil in 'echo %%j' ausgegeben und mit Leerzeichen getrennt, so daß der Nachklapp 'Microsoft ...' wegfällt. Da hinten Leerzeilen folgen, bekommt man Echos raus, also muß dies abgefangen werden, sonst würden unsinnige Befehle eingesetzt. Statt des letzten echo %%m kannst Du einen Befehl einsetzen oder einen Batch mit Call aufrufen, der den Freigabenamen der Form \\Server\Freigabe als Parameter enthält. ------------- Gruß, Auer Zitieren Link zu diesem Kommentar
klausk 10 Geschrieben 17. September 2003 Melden Teilen Geschrieben 17. September 2003 Mit einem anderen Trennzeichen ( : statt \ ) und einer zweiten For-Schleife geht's - es wird der komplette Pfad aller Netzlaufwerke angezeigt: FOR /F "Tokens=2-3 Delims=: skip=6" %%i in ('net use') do FOR /F "Delims=; " %%A in ('@echo %%i') do @echo %%A Der Nachteil an dem Konstrukt ist, dass am Schluß immer eine leere Ausgabe ohne Pfad erzeugt wird. Beim Testen @echo off nicht vergessen, sonnst wird die Ausgabe unübersichtlich ;) Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.