mak-xxl
Goto Top

Betrifft: fsutil-Problem unter Win 10

Liebe Batch-Gemeinde,

ich sitze hier vor einem Problem, das erst ab Windows 10 (alle Versionen) auftritt.

In einigen vorliegenden Batchdateien ist es zwingend, dass vor dem Lauf von Kopierjobs (robocopy)
abgefragt wird, ob Quell- und/oder Ziel-Volumes ein bestimmtes Label tragen.

Bei Volumes mit Buchstaben kann das mit 'vol' oder 'dir' oder anderen Hilfsmitteln erledigt werden.

Wenn es sich aber um (NTFS)-Mountpoints handelt, funktioniert das nicht - die genannten Befehle geben
immer das Label des Stammlaufwerkes zurück.

Abhilfe war hierzu (ab Win 2000 bis einschließlich Win 8.1) der Befehl
fsutil fsinfo volumeinfo %MountPath%\
wobei "%MountPath%\" i.e. so aussieht:
'X:\VZ\UVZ\MVZ\', dabei ist in 'MVZ' ein Volume mit dem eindeutigen Label gemounted.

Zeile in Batch zum besseren Verständnis:
'for /f "delims=\" %%i in ('fsutil fsinfo volumeinfo %MountPath%\ ^| find "%LabelName%"') do (  

Unter Win10 ergibt nun der Befehl
fsutil fsinfo volumeinfo %MountPath%
zweierlei:
1. mit abschließendem '\': "Das System kann den angegebenen Pfad nicht finden."
2. dto ohne '\': "Zugriff verweigert"

Anmerkung: Variante 2 wurde nur der Vollständigkeit halber getestet.

Das angedachte Ausweichen auf 'wmic' gilt als gescheitert, da hier keine Konstellation gefunden wurde,
die Label aus (in Unterverzeichnissen) gemounteten Volumes abfragen kann.

Ebenfalls scheidet die Idee der temporären Vergabe eines Buchstabens an das entspr. Volume aus, da
zu viele parallel laufende Überwachungsscripte getriggert würden.

Hat jemand eine Idee, wie diesem Problem beizukommen wäre?

Danke für Eure Mühe und freundliche Grüße von der Insel - Mario

Content-ID: 3011141328

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

Ausgedruckt am: 21.11.2024 um 21:11 Uhr

colinardo
Lösung colinardo 08.06.2022 aktualisiert um 14:05:51 Uhr
Goto Top
Servus.
Wenn du bei fsutil bleiben willst nimmst du stattdessen den Volume-Identifier,
@echo off
set "mountpath=C:\my\path"  
for /f "tokens=* delims= " %%a in ('mountvol "%mountpath%" /l') do for /f "tokens=1,* delims=: " %%b in ('fsutil fsinfo volumeinfo %%a ^| findstr /i "Volumename"') do set "volumelabel=%%c"  
echo %volumelabel%
ansonsten einfach wmic volume (s. Thomas) oder etwas abgewandelte Form
@echo off
:: bitte Backslash am Ende des Pfades
set "mountpath=C:\my\path\"  
for /f "tokens=1* delims==" %%a in ('wmic volume where "Caption='%mountpath:\=\\%'" get label /value ^|findstr "="') do set "volumelabel=%%b"  
echo %volumelabel%
... oder auch mit etwas PS Hilfe
@echo on
:: bitte Backslash am Ende des Pfades
set "mountpath=C:\my\path\"  
for /f "delims=" %%a in ('powershell -EP Bypass -C "(gcim win32_Volume -Filter \"Caption ^= '%mountpath:\=\\%'\").Label"') do set "volumelabel=%%a"  
echo %volumelabel%
Grüße Uwe
TK1987
Lösung TK1987 08.06.2022 um 10:10:22 Uhr
Goto Top
Moin,

so müsste es gehen:
@echo off
set MountPoint=C:\wo\auch\immer\gemountet\
for /f "Skip=1 Delims=" %%a in ('wmic volume where "Caption='%MountPoint:\=\\%'" get label ^| findstr /r /v "^$"') do echo %%a  

Gruß Thomas
mak-xxl
mak-xxl 08.06.2022 um 12:58:57 Uhr
Goto Top
Mahlzeit ins Forum,

vielen Dank für die Antworten.

@colinardo: Alle 3 Vorschläge funktionieren. 3 kurze Bemerkungen dazu:

1. Warum ich 'mountvol' ignoriert habe, erschließt sich mir nicht mehr ...
Vor allem, weil es das Tool ist, das in den verwendeten Mount-Scripten am meisten leisten muss. Diese Lösung wird in den Scripten eingepflegt, weil sie vor allem bis W2k abwärtskompatibel (und sehr elegant) ist.

2. Wmic hatte ich nach einigen wenigen Versuchen beiseite gelegt, weil ich damit wenig Erfahrung habe und wohl deshalb nix brauchbares zu Stande bekommen habe. Danke für die Lösung.
Der Vollständigkeit halber: Der wmic-Aufruf erzeugt unter allen Desktop- und Server-OS (s.o.) einen Fehler 'Keine Instanz verfügbar', gibt aber das Label anschließend korrekt aus. Ursachensuche steht noch aus.

3. Ich vergaß zu erwähnen, dass mir die Powershell aus restriktiven Gründen sowie wegen fehlender Abwärtskompatibilität nicht zur Verfügung steht. Vielen Dank für die Lösung, Uwe!

@TK1987:

Vielen Dank für die Lösung, die (leider) einen Fehler 'Keine Instanz verfügbar' ausgibt, ohne jedoch das Label auszugeben.
Vielleicht kannst Du nochmals darauf schauen, allein wegen der selten anzutreffenden RegEx-Lösung wäre das schön ... face-wink

Euch Beiden herzlichen Dank, allen, die sich die Mühe des Lesens gemacht haben, natürlich ebenfalls Dank!

Freundliche Grüße von der Insel - Mario
TK1987
TK1987 08.06.2022 aktualisiert um 13:22:52 Uhr
Goto Top
Moin,

Zitat von @mak-xxl:
Vielen Dank für die Lösung, die (leider) einen Fehler 'Keine Instanz verfügbar' ausgibt, ohne jedoch das Label auszugeben.
Der Fehler sagt, dass kein Volume mit dem MountPoint gefunden wurde.
Bei mir funktioniert das tadellos - poste mal bitte deinen aktuellen Code.

Beachte auch, dass der Pfad immer vollständig übereinstimmen muss - hast du vielleicht den abschließenden Backslash am Ende des Pfades weggelassen?

Du kannst auch folgenden Befehl mal in der Konsole direkt ausführen und abgleichen:
wmic volume get Caption,Label

Gruß Thomas