Windows Batch-Datei ruft Dateisysteminformationen ohne erhöhte Rechte ab

625
Trashman

Ich habe eine Batch-Datei, die das Dateisystem überprüfen und Optionen für ein Programm auswählen muss, das auf dem Dateisystem (das in dieser Umgebung NTFS oder FAT32 sein kann) ausgeführt wird. Für Windows-Systeme, für die ich Administratorrechte habe, kann ich 'fsutils fsinfo' verwenden, um Informationen zum Dateisystem zu erhalten. Ich habe jedoch Benutzer ohne Administratorrechte, die möglicherweise diese Batchdatei ausführen müssen, und Maschinen, für die ich möglicherweise keine Administratorrechte besitzt. Gibt es ein Äquivalent zu 'fsutils fsinfo', das Dateisysteminformationen für einen Nicht-Admin-Benutzer erhalten kann (aber offensichtlich nicht schreibt, da fsutils es kann)?

0
Sehen Sie sich diese Stackoverflow-Frage an. http://stackoverflow.com/questions/6995813/how-can-i-use-batch-to-determine-if-a-computer-isusing-fat32-or-ntfs maudam vor 8 Jahren 0
Danke, Maudam. Ich bekomme nicht genau das, wonach ich suche, nur in einer Batch-Datei (ich muss mich nicht darauf verlassen, einen Fehler zu generieren, um die Antwort zu erhalten), aber ich denke, ich kann die VBS-Version in diesem Link funktionieren lassen. Endspiel ist dasselbe. Trashman vor 8 Jahren 0
Ich habe mich für die Antwort von JosefZ entschieden, da sie meine ursprüngliche Frage ansprach (besser als meine eigene Antwort), dies komplett innerhalb einer Batch-Datei erledigt hat, ohne sich dabei auf Fehler zu verlassen. Ich schätze jedoch die Hilfe von Maudam und die VBS-basierte Antwort von paxdiablo über Maudams Link. Trashman vor 8 Jahren 0

2 Antworten auf die Frage

0
JosefZ

Code-Auszug:

for /F %%G in (' wmic path win32_volume where "Caption='C:\\'" get FileSystem /value^|findstr "=" ') do for /F %%g in ("%%~G") do set "_%%~g" set _FileSystem 

Ausgabe :

==>for /F %G in ('wmic path win32_volume where "Caption='C:\\'" get FileSystem /value ^|findstr "="') do @for /F %g in ("%~G") do @set "_%~g"  ==>set _FileSystem _FileSystem=NTFS  ==> 

Ressourcen (Erforderliche Lektüre):

Bearbeiten Sie das Dateisystem für alle Live- Laufwerke:

@ECHO OFF >NUL rem SETLOCAL enableextensions for /F %%X in (' wmic path Win32_LogicalDisk get caption /value^|findstr "=" ') do for /F "tokens=2 delims==:" %%x in ("%%~X") do (  for /F %%G in (' wmic path win32_volume where "Caption='%%~x:\\'" get FileSystem /value^|findstr "=" ') do for /F %%g in ("%%~G") do set "_%%~x-%%~g"  ) set _ 

Ausgabe

==>set _ Environment variable _ not defined  ==>D:\bat\SU\929159.bat _C-FileSystem=NTFS _D-FileSystem=NTFS _E-FileSystem=CDFS  ==>set _ _C-FileSystem=NTFS _D-FileSystem=NTFS _E-FileSystem=CDFS  ==> 
Mir gefällt, dass dies eine reine Batchdatei-Implementierung ist. Ich kann das nehmen und das Dateisystem generieren, indem ich nach "Caption =" die in den Anführungszeichen enthaltenen Anführungszeichen durch einen meiner Laufwerksbuchstaben ersetzt. Ein Problem, die Art und Weise, wie dies ausgeführt wird, basiert tatsächlich auf einer Datei und auf welchem ​​Laufwerk sich die Datei befindet. Ich habe das linke (arg, 2) in meinem VBS-Skript verwendet, um nur den Laufwerksbuchstaben zu nehmen. Hier muss es zwei "\" nach dem Laufwerksbuchstaben geben. Wenn ein vollständiger Pfad als Parameter an diese Batchdatei übergeben wird, wie kann ich dann das Laufwerk ordnungsgemäß überprüfen? (die Möglichkeiten, die ich versuche, immer Fehler zu bekommen) Trashman vor 8 Jahren 0
Nun, ich habe mir gerade Ihre Ressourcenliste angesehen und festgestellt, dass ich nur C: durch% ~ d1 ersetzen muss Trashman vor 8 Jahren 1
0
Trashman

Hier ist eine alternative Lösung, die auch für mich funktioniert hat, obwohl es nicht rein mit einer Batchdatei gemacht wurde:

In der VBS-Datei 'GetFileSys.vbs':

Set args = Wscript.Arguments Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") Set colVols = objWMIService.ExecQuery ("select * from Win32_LogicalDisk")  For Each arg in args For Each objVol in colVols if objvol.Name = left(arg,2) then Wscript.Echo objVol.FileSystem end if Next Next 

(Der obere Teil, den ich mir von paxdiablo über den Link von Maudam geliehen habe, https://stackoverflow.com/questions/6995813/how-can-i-use-batch-to-determine-if-a-computer-isusing -fat32-or-ntfs, dann an meine Bedürfnisse angepasst)

Dann rief ich in der Batchdatei die VBS-Datei mit cscript wie folgt an:

cscript //NoLogo GetFileSys.vbs %1 %2 %3 

Ergebnisse:

NTFS FAT32 ReFS 

(Ich wusste gar nicht, dass mein System ReFS verwendet hat, bis ich das ausgeführt habe.)