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

2 ответа2

0

Фрагмент кода:

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

Выход:

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

==>

Ресурсы (требуется чтение):

Изменить, чтобы получить файловую систему для всех живых дисков:

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

Выход

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

==>
0

Вот альтернативное решение, которое также сработало для меня, хотя оно было сделано не только с командным файлом:

В файле VBS '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

(Верхнюю часть я позаимствовал у paxdiablo по ссылке, предоставленной Maudam, https://stackoverflow.com/questions/6995813/how-can-i-use-batch-to-determine-if-a-computer-is-using -fat32-or-ntfs , затем адаптируется к моим потребностям)

Затем в командном файле я назвал VBS-файл с помощью cscript следующим образом:

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

Результаты:

NTFS
FAT32
ReFS

(Я даже не осознавал, что моя система использует ReFS, пока я не запустил это)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .