我有一个批处理文件,需要检查文件系统并根据文件系统(在此环境中可能是 NTFS 或 FAT32)选择正在运行的程序的选项。对于我拥有管理员权限的 Windows 系统,我可以使用“fsutils fsinfo”获取文件系统信息 - 但是我有一些没有管理员权限的用户可能需要运行此批处理文件,而我可能也不一定拥有这些机器的管理员权限。是否有与“fsutils fsinfo”等效的程序可以获取(但显然不能像 fsutils 那样写入)非管理员用户的文件系统信息?
答案1
代码片段:
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
==>
资源(必读):
- (命令参考)Windows CMD 命令行的 AZ 索引
- (其他细节)Windows CMD Shell 命令行语法
- (
%~G
等专题页面)命令行参数(参数)
编辑获取所有文件系统居住驱动器:
@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
==>
答案2
这是一个对我来说也有用的替代解决方案,尽管它不是纯粹通过批处理文件完成的:
在 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
(上面的部分是我从 Maudam 提供的 paxdiablo 链接借来的,https://stackoverflow.com/questions/6995813/how-can-i-use-batch-to-determine-if-a-computer-is-using-fat32-or-ntfs,然后根据我的需要进行调整)
然后,在批处理文件中,我使用 cscript 调用 VBS 文件,如下所示:
cscript //NoLogo GetFileSys.vbs %1 %2 %3
结果:
NTFS
FAT32
ReFS
(直到运行这个程序我才意识到我的系统正在使用 ReFS)