webbudda
Goto Top

Dir auf Netzwerkpfad

Hi,

wir wollte mir mit einem batch mit "dir-Befehl" die Verzeichnisse eines Netzwerkpfades in eine Datei leiten. Habe einfach meine Win7 CMD in das Netzwerk kopiert wo der batch liegt. Das einfachste klappt natürlich nie:
Cmd.exe unterstützt UNC-Namen für das aktuelle Verzeichnis nicht

Gibt es da eine Alternative? An irgendwelchen Serverkonfigurationen oder ähnliches werde ich nichts ändern können.

Vielen Dank & Gruß

Content-ID: 293009

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

Ausgedruckt am: 16.11.2024 um 05:11 Uhr

122990
122990 13.01.2016 aktualisiert um 23:49:22 Uhr
Goto Top
Als Netzlaufwerk mappen ;-P
Oder auch mit robocopy im Demo-Modus (/L)

Gruß grexit
rubberman
rubberman 14.01.2016 aktualisiert um 00:29:01 Uhr
Goto Top
Hallo.

Als Netzlaufwerk mappen
... macht PUSHD on-the-fly und POPD trennt es wieder.

Grüße
rubberman
Friemler
Friemler 14.01.2016 aktualisiert um 12:17:34 Uhr
Goto Top
Hallo,

wie rubberman schon schrieb: CMD.exe hat da ein zwar dokumentiertes (siehe PUSHD /?) aber relativ unbekanntes Feature eingebaut.
@echo off & setlocal

set "OutFile1=%UserProfile%\Desktop\MountedDir.txt"  
set "OutFile2=%UserProfile%\Desktop\SharePathDir.txt"  

pushd "%~dp0"  

(for /r "%CD%" %%f in (*.*) do (  
  echo %%f
)) > "%OutFile1%"  

popd

(for /r "%~dp0" %%f in (*.*) do (  
  echo %%f
)) > "%OutFile2%"  

Den obigen Code als Bachfile speichern, auf dem Netzwerk-Share ablegen und aus einem Explorerfenster per Doppelklick starten. Auf dem Desktop werden dann zwei Textdateien mit dem Listing der Dateien auf dem Share erstellt.

Die eine Datei enthält die Netzwerk-Pfade zu den Dateien (\\Server\Share\Datei). An den Pfaden in der anderen Datei sieht man, dass der PUSHD-Befehl das Share als Laufwerk Z: mappt, falls es noch kein Laufwerk mit dieser Bezeichnung gibt. Ansonsten ist es der erste unbenutzte Buchstabe von Z aus abwärts.

Gruß
Friemler
StefanKittel
StefanKittel 14.01.2016 um 07:33:32 Uhr
Goto Top
Hallo,

warum kopierst Du die CMD dorthin?
Was soll Dir das bringen?

Du kannst Sie auch einfach mit dem Zielverzeichnis starten.
Das führt dann zu Deiner Fehlermeldung .
Also auch hier wozu?

Du kannst einfach mit der lokalen Dir folgendes machen.
dir \\server01\daten > c:\temp\liste1.txt
oder
dir /s \\server01\daten > c:\temp\liste1.txt
wenn Du alle Verzeichnisse haben möchtest

Stefan
webbudda
webbudda 14.01.2016 um 09:22:32 Uhr
Goto Top
Die cmd kopiert, weil der batch ja nicht lokal liegt (s.o.).

Es soll jeder auf dem Server einen batch ausführen können der den aktuellen Verzeichnisinhalt in eine Datei speichert. Dazu möchte ich eigentlich auch nicht temporär Laufwerke mappen bei den Leuten auf dem Rechner, da ich nicht weiß, ob z.B. Z:\ bereits belegt ist.

Oder habe ich da etwas falsch verstanden?

Danke Friemler aber richtig verstehen tue ich das nicht was du schreibst. Es wird nur eine MountedDir erzeugt, die enthält leider nicht alle Unterverzecihnisse rekursiv.

Danke & Gruß
StefanKittel
StefanKittel 14.01.2016 um 09:30:23 Uhr
Goto Top
Hallo,

langsam verstehe ich (vieleicht).

Wenn Du eine Batchdatei lokal aufrufst, ist der Speicherort auf der aktuelle Pfad.
Z.B. c:\temp\test.bat

Wenn die Batchdatei aus einer URL stammt, dann nicht.
Z.B. \\server01\daten\test.bat
In diesem Fall wird der aktuelle Pfad auf den lokalen Standardpfad zurückgestellt.

Dies kann man durch 3 Ansätze umgehen
- Aufruf von einem Netzwerklaufwerk mit Buchstaben
- Aufruf mit dem gewünschten Pfad als Parameter (z.B. mit einer Verknpüfung oder einer anderen Batchdatei)
- Den Pfad hart in die Datei schreiben

Oder ganz elegemant ein kleines Programm mit z.B. VB schreiben.

Viele Grüße

Stefan
webbudda
webbudda 14.01.2016 aktualisiert um 12:44:12 Uhr
Goto Top
Friemler das mit dem mounten klappt wohl doch ganz gut. Kann man die Unterordner noch einbeziehen?
mit "for /r" kommt wieder der fehler : UNC path not supported.

Was sollte ind er anderen Datei kommen? Die ist nicht erzeugt worden.
Friemler
Friemler 14.01.2016 aktualisiert um 12:51:04 Uhr
Goto Top
Hallo webbudda,

eigentlich dachte ich, dass Du den Demo-Code aus meinem ersten Posting selbst an Deine Wünsche anpasst. Aber OK, ich habe das Script oben geändert, jetzt ackert es die Verzeichnisstruktur rekursiv durch. Den Dateifilter in den Klammern der FOR-Schleifen zu konfigurieren solltest Du selbst hinbekommen. Du kannst dort auch mehrere Filter durch Leerzeichen getrennt angeben.

Zu den Dateien, die auf dem Desktop abgelegt werden:

  1. Die Datei MountedDir.txt enthält das Verzeichnislisting in der Form "Z:\Datei" bzw. "Z:\Ordner\Datei", wenn das Netzwerkshare vom PUSHD-Befehl als Laufwerk Z: gemounted wurde (hängt von Deinen lokalen Gegebenheiten ab, statt Z: könnte es auch Y:, X:, usw. sein, eben der erste unbenutzte Laufwerksbuchstabe von Z abwärts).
  2. Die Datei SharePathDir.txt enthält das Verzeichnislisting in der Form "\\Server\Share\Datei" bzw. "\\Server\Share\Ordner\Datei".

Dass die SharePathDir.txt nicht erzeugt wird, kann ich nicht nachvollziehen, funktioniert hier einwandfrei. Ist vielleicht ein Problem mit Zugriffsrechten.

Um das zu debuggen, entferne das @echo off am Anfang des Scripts und starte das Script per Tastatureingabe aus einem Konsolenfenster, NICHT per Doppelklick in einem Explorerfenster. Dann kannst Du die Abarbeitung des Scripts verfolgen und siehst auch evtl. auftretende Fehlermeldungen.

Zusätzlich kannst Du auch die erste FOR-Schleife zur Erstellung der MountedDir.txt entfernen und nur die SharePathDir.txt durch die andere FOR-Schleife erstellen lassen.

[EDIT]
Die Fehlermeldung btr. UNC-Pfad kannst Du ignorieren.
[/EDIT]

Gruss
Friemler