Stapelkopieordner nach GUID

785
fkk

Kann ich in einer Batchdatei einen Ordner kopieren, der sich unter einem konstanten Pfad wie \? \ Volume befindet?

Beim Kopieren (Kopieren, Kopieren oder Kopieren) eines Verzeichnisses und dessen Inhalt von einem lokalen Wechseldatenträger (z. B. einem externen USB-Laufwerk) an einen anderen Speicherort auf demselben Laufwerk möchte ich eindeutige und konstante absolute Pfade wie \? \ Verwenden. Volume, um die Verwendung von Laufwerksbuchstaben zu vermeiden, die sich im Laufe der Zeit ändern können. Um die Kopie zu bearbeiten, soll die Batch-Datei auf dem Wechseldatenträger abgelegt werden. Falls die Datei jedoch verschoben oder an einem anderen Ort abgelegt wird, möchte ich sichergehen, dass sie auf dem guten Laufwerk ausgeführt wird.

Bisher habe ich versucht:

  • COPY kann \\ \ Volume -Pfade verwenden, um eine Datei zu kopieren, Ordner können jedoch nicht kopiert werden
  • XCOPY gibt einen Fehler "ungültiges Laufwerk" zurück
  • ROBOCOPY gibt einen "Netzwerkpfad nicht gefunden, warten Sie 30 Sekunden ..."
  • für jeden Befehl oben: Syntaxvariationen mit \? \ UNC \ Volume und mit dem nachgestellten "\"

Mache ich etwas falsch oder ist das einfach nicht der Weg, das zu tun?

Gibt es eine andere Möglichkeit, invariante Positionen zu verwenden?

Im Idealfall sollte es so wenig wie möglich möglich sein. Mit Tweaking meine ich: das Laufwerk beschriften oder einen festen Buchstaben geben usw.

1

1 Antwort auf die Frage

1
JosefZ

Das Benennen eines Volumes unterscheidet sich von dem Benennen von Dateien, Pfaden und Namespaces .

Das nächste Skript zeigt einen möglichen Ansatz, wie der Laufwerksbuchstabe einem Volume zugewiesen wird . Verwendet die Klasse Win32_Volume :

Die Win32_VolumeKlasse repräsentiert einen Speicherbereich auf einer Festplatte. Die Klasse gibt lokale Volumes zurück, die formatiert, nicht formatiert, gemountet oder offline sind. Ein Volume wird mit einem Dateisystem wie FAToder formatiert NTFSund kann einen Laufwerksbuchstaben haben. Eine Festplatte kann mehrere Datenträger haben, und Datenträger können sich auf mehrere physische Datenträger erstrecken. Die Win32_VolumeKlasse unterstützt keine Plattenlaufwerksverwaltung.

@ECHO OFF SETLOCAL EnableExtensions DisableDelayedExpansion call :getDriveLetter "\\?\Volume\" call :getDriveLetter "\\?\Volume\" call :getDriveLetter "\\?\Volume\" :endlocal ENDLOCAL goto :eof  :getDriveLetter set "_volumeID=%~1" set "_DriveLetter=" for /F "tokens=1,* delims==" %%G in (' wmic volume where "DeviceID='%_volumeID:\=\\%'" get DriveLetter /value ') do for /F %%g in ("%%~H") do set "_%%~G=%%~g" call :doSomething goto :eof  :doSomething rem only output for debugging  if defined _DriveLetter ( echo %_volumeID% DriveLetter %_DriveLetter%  ) else ( echo %_volumeID% DriveLetter unknown ) goto :eof 

Ausgabe :

d:\temp> D:\bat\SU\1163592.bat \\?\Volume\ DriveLetter F: \\?\Volume\ DriveLetter unknown \\?\Volume\ DriveLetter E: 
Ich habe gesehen, dass Sie sich die Zeit genommen haben zu antworten, aber ich persönlich kann das nicht mit dem Kopiervorgang verbinden fkk vor 7 Jahren 0
@fkk Ich weiß nicht was unklar ist. Bei einem bestimmten USB-Laufwerk rufen Sie: getDriveLetter "\\? \ Volume \" `sollte den aktuell zugewiesenen Laufwerksbuchstaben in der Variable"% _DriveLetter% "wie" F: "in zurückgeben oben Beispiel. Zu anderen Zeiten wird "G:" zurückgegeben (wenn "F:" Buchstabe von einem anderen USB-Laufwerk belegt werden könnte); andere Male gibt "H:" zurück (wenn "F:" und "G:" Buchstaben von anderen USB-Laufwerken belegt werden könnten) usw. usw. JosefZ vor 7 Jahren 0
eigentlich nur gesagt, dass keine der kopierfunktionen mit unc-pfad funktionieren kann, wäre klarer gewesen. Daher ist der einzige Weg eine Problemumgehung, die darin besteht, den Laufwerksbuchstaben über wmic abzurufen, um die Antwort abzuschließen. Hier der vereinfachte Code: `for / F" usebackq tokens = 1,2 delims == "%% G in (\` wmic volume, wobei "DeviceID = '% _ volID: \ = \\%'" DriveLetter / value \ `abruft ) setzen Sie _ %% G = %% H`. wobei _volID die Variable ist, die den unc-Pfad des betreffenden Datenträgers enthält. fkk vor 7 Jahren 0
@fkk Wenn diese Antwort hilfreich war, sollten Sie sie als akzeptiert markieren. [Siehe diese Seite] (http://meta.stackexchange.com/questions/5234/) für eine Erklärung, warum dies wichtig ist. JosefZ vor 7 Jahren 0