Как я могу использовать пакет, чтобы определить, использует ли компьютер FAT32 или NTFS? - PullRequest
4 голосов
/ 09 августа 2011

Как я могу использовать пакетный режим, чтобы определить, использует ли компьютер FAT32 или NTFS, и возможно ли это вообще?

Ответы [ 5 ]

7 голосов
/ 09 августа 2011

Есть несколько способов сделать это.

Примитивный способ - запустить chkdsk на томе, который вас интересует, и захватить вывод.Часть этого вывода указывает, является ли диск NTFS или нет.К сожалению, это больше, чем вы ожидаете, и может занять некоторое время.

Аналогично, вы можете проанализировать вывод fsutil fsinfo volumeinfo c:\, который выглядит примерно так:

Volume Name : Primary
Volume Serial Number : 0x4f70e7b
Max Component Length : 255
File System Name : NTFS
Supports Case-sensitive filenames
Preserves Case of filenames
Supports Unicode in filenames
Preserves & Enforces ACL's
Supports file-based Compression
Supports Disk Quotas
Supports Sparse files
Supports Reparse Points
Supports Object Identifiers
Supports Encrypted File System
Supports Named Streams

Извлекая файлИмя системы, вы можете узнать, что вам нужно.

Несколько менее примитивный способ - использовать VBScript с WMI для обхода массива устройств, проверяя каждый интересующий вас том.

Класс Win32_LogicalDisk (доступен в Windows 2000 и более поздних версиях) имеет атрибут FileSystem, который указывает на это, и вы можете использовать следующий код в качестве основы:

Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colVols = objWMIService.ExecQuery ("select * from Win32_LogicalDisk")
For Each objVol in colVols
     MsgBox objVol.Name & " : " & objVol.FileSystem
Next
5 голосов
/ 09 августа 2011

Похоже, что попытка использовать альтернативный файловый поток (file.name:strmname) на томе FAT не удалась, так как насчет:

@echo off
set drv=C:
set file=temp.temp

if exist %drv%\%file% del %drv%\%file%
@echo 1 > %drv%\%file%:stream
if not exist %drv%\%file% goto FAT

:NTFS
echo is NTFS
del %drv%\%file%
goto eof

:FAT
echo is FAT
goto eof

:eof
3 голосов
/ 26 августа 2015

Это старый вопрос, но вот мой ответ, чтобы получить файловую систему диска и затем установить ее в качестве переменной %DriveType%

Замените C: на выбранный вами диск и используйте одну из следующих команд в зависимости от того, где он используется:

Для использования в командном файле:

@echo off
for /f "tokens=5" %%a in ('@fsutil fsinfo volumeinfo c:^|findstr /B "File System Name : "') do (@set DriveType=%%a)
echo %DriveType%
pause

Для использования в командной строке:

for /f "tokens=5" %a in ('@fsutil fsinfo volumeinfo c:^|findstr /B "File System Name : "') do @set DriveType=%a
2 голосов
/ 09 августа 2011

Попробуйте:

@echo off
SET VOLUME_LETTER=c:
fsutil fsinfo volumeinfo %VOLUME_LETTER% 2>NUL | find /I /N "NTFS">NUL

if [%ERRORLEVEL%] == [0] echo NTFS
1 голос
/ 08 сентября 2013

Еще один способ (требуются права администратора):

fltmc volumes | find ":"

Это перечислит тип файловой системы всех дисков. Вы можете фильтровать по дискам, используя, например, "C:" вместо ":"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...