Пакетный файл Windows получает информацию о файловой системе без повышенных привилегий

559
Trashman

У меня есть пакетный файл, который должен проверить файловую систему и выбрать параметры для программы, которая выполняется на основе файловой системы (которая может быть NTFS или FAT32 в этой среде). Для систем Windows, на которых у меня есть права администратора, я могу использовать 'fsutils fsinfo' для получения информации о файловой системе - но у меня есть пользователи без прав администратора, которым может потребоваться запуск этого пакетного файла, и машины, к которым у меня могут не быть привилегии администратора. Есть ли эквивалент fsutils fsinfo, который может получить (но, очевидно, не записать, как может fsutils) информацию о файловой системе для пользователя без прав администратора?

0
Посмотрите на этот вопрос stackoverflow. http://stackoverflow.com/questions/6995813/how-can-i-use-batch-to-determine-if-a-computer-is-using-fat32-or-ntfs maudam 8 лет назад 0
Спасибо, мадам. Я не могу получить именно то, что я ищу, только в командном файле (я не хочу полагаться на генерацию ошибки, чтобы получить ответ), но я думаю, что могу заставить работать версию vbs по этой ссылке. Эндшпиль тот же. Trashman 8 лет назад 0
Я выбрал ответ JosefZ, поскольку он отвечал на мой первоначальный вопрос (лучше, чем мой собственный ответ), делая это полностью в пакетном файле и далее, не полагаясь на обнаружение ошибок. Тем не менее, я ценю помощь от Маудама и ответ на основе VBS от paxdiablo по ссылке Маудама. Trashman 8 лет назад 0

2 ответа на вопрос

0
JosefZ

Code snippet:

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 

Output:

==>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 ==> 

Resources (required reading):

Edit to get file system for all live drives:

@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 _ 

Output

==>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 ==> 
Мне нравится, что это чистая реализация командного файла. Я могу взять это, и я могу сгенерировать файловую систему, заменив то, что находится внутри одинарных кавычек после «Caption =», одной из моих букв диска. Одна проблема, способ, которым это запустится, на самом деле основывается на файле и на каком диске находится файл. Я использовал левую (arg, 2) в своем скрипте VBS, чтобы просто взять букву диска. Здесь должно быть два «\» после буквы диска. Если в качестве параметра для этого командного файла передается полный путь, как мне получить его для правильной проверки диска? (способы я пытаюсь продолжать получать ошибки) Trashman 8 лет назад 0
Я только что посмотрел ваш список ресурсов и увидел, что мне просто нужно заменить C: на% ~ d1 Trashman 8 лет назад 1
0
Trashman

Here's an alternate solution that also worked for me, though it wasn't done purely with a batch file:

In VBS File '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 

(The top portion I borrowed from paxdiablo via the link provided by Maudam, https://stackoverflow.com/questions/6995813/how-can-i-use-batch-to-determine-if-a-computer-is-using-fat32-or-ntfs, then adapted to my needs)

Then, In the batch file, I called the VBS file with cscript like so:

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

Results:

NTFS FAT32 ReFS 

(I didn't even realize my system was using ReFS until I ran this)