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-Key: 293009

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

Printed on: April 20, 2024 at 09:04 o'clock

Mitglied: 122990
122990 Jan 13, 2016 updated at 22:49:22 (UTC)
Goto Top
Als Netzlaufwerk mappen ;-P
Oder auch mit robocopy im Demo-Modus (/L)

Gruß grexit
Member: rubberman
rubberman Jan 13, 2016 updated at 23:29:01 (UTC)
Goto Top
Hallo.

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

Grüße
rubberman
Member: Friemler
Friemler Jan 13, 2016, updated at Jan 14, 2016 at 11:17:34 (UTC)
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
Member: StefanKittel
StefanKittel Jan 14, 2016 at 06:33:32 (UTC)
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
Member: webbudda
webbudda Jan 14, 2016 at 08:22:32 (UTC)
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ß
Member: StefanKittel
StefanKittel Jan 14, 2016 at 08:30:23 (UTC)
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
Member: webbudda
webbudda Jan 14, 2016 updated at 11:44:12 (UTC)
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.
Member: Friemler
Friemler Jan 14, 2016 updated at 11:51:04 (UTC)
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