如果你事先知道要绑定的磁盘(例如C 盘或一个共享文件夹accountingreceivables),你可以用 GetDrive 的方法来直接绑定磁盘。这样你可以不用去筛选就获得特定磁盘的信息。GetDrive 需要一个单独的参数:磁盘符号或者是共享文件夹的 UNC 路径。你可以用如下的几种格式:C C: C:
在下面的脚本中首先创建一个 FSO 对象,然后用 GetDrive 的方法来直接绑定C盘,然后回显可用的磁盘空间:
1 Set objFSO = CreateObject("Scripting.FileSystemObject")
2 Set objDrive = objFSO.GetDrive("C:")
3 Wscript.Echo "Available space: " & objDrive.AvailableSpace
注意,这里没有 For Each 循环,你就可以获得磁盘的属性。因为脚本是返回一个单独的磁盘对象,而不是所有对象的集合。因此也就不用筛选了。
列举磁盘驱动器的属性
磁盘集合的作用总是用来监视和列举的。作为一个系统管理员,你需要知道计算机上的可用磁盘,也需要知道磁盘的序列号、可用空间等信息。在你获得当前磁盘的集合或者单个磁盘的时候,你就可以获得下表列出的所有属性。
1、AvailableSpace——报告磁盘上可以使用的空间,单位是 bytes。如果想以 kb 为单位返回,除以 1024,如果想以 M 为单位返回,则除以 1.048,576。这个属性返回的是可用的磁盘空间的总数。如果一个磁盘启用了磁盘限额,那么他返回的数字可能比实际的要小。
2、DriveLette——返回特定磁盘的盘符。这个盘符不包含那么冒号。例如软盘返回的是A,而不是A:
3、DriveType——整数的值代表不同的磁盘类型:1:移动硬盘 2:硬盘 3:网络硬盘
4:CD-ROM 5:RAM 磁盘
4、FreeSpace——返回磁盘剩余空间的总额。单位是 bytes,如果是返回的单位是 kb,就除以 1024,如果是以 M 为单位,除以 1,048,576。注意:这个和磁盘可用空间不一样,剩余的磁盘空间不会考虑磁盘限额。
5、FileSystem——返回文件系统的类型(FAT,FAT32,NTFS)
6、IsReady——标识磁盘是否可以访问。这个值来判断软盘和CD-ROM是否为空
7、Path——磁盘路径。对于本地磁盘,返回盘符和脱尾符(就是那个冒号),比如A:对于网络磁盘,就返回它的 UNC 路径。
8、RootFolder——返回磁盘根目录下的文件夹。
9、SerialNumber——磁盘的生产商给磁盘分配的序列号。对于软盘和网络硬盘来说,它们的值是 0。
10、ShareName——分配给网络驱动去的共享名称。
11、TotalSize——报告整个的磁盘空间,单位是 bytes,如果想以 kb 为单位,除以 1024,如果想以 M 为单位返回,则单位为 1,048,576。
12、VolumeName——分配给磁盘的卷名。
为了列举安装在计算机里的磁盘的属性,创建一个 FSO 实例,然后创建一个 FSO 属性的对象,用 For Each 循环,来重现各个磁盘的配置。对于集合当中的每个磁盘,你可以返回一个或者的属性。如下列脚本列举出安装在计算机上所有磁盘的所有属性。
1 Set objFSO = CreateObject("Scripting.FileSystemObject")
2 Set colDrives = objFSO.Drives
3 For Each objDrive in colDrives
4 Wscript.Echo "Available space: " & objDrive.AvailableSpace
5 Wscript.Echo "Drive letter: " & objDrive.DriveLetter
6 Wscript.Echo "Drive type: " & objDrive.DriveType
7 Wscript.Echo "File system: " & objDrive.FileSystem
8 Wscript.Echo "Is ready: " & objDrive.IsReady
9 Wscript.Echo "Path: " & objDrive.Path
10 Wscript.Echo "Root folder: " & objDrive.RootFolder
11 Wscript.Echo "Serial number: " & objDrive.SerialNumber
12 Wscript.Echo "Share name: " & objDrive.ShareName
13 Wscript.Echo "Total size: " & objDrive.TotalSize
14 Wscript.Echo "Volume name: " & objDrive.VolumeName
15 Next
上述脚本有个潜在的缺点,就是如果没有软盘或者光驱里面没有光盘,会产生一个 disk not ready 的错误出来。当磁盘没有准备好的时候用 FSO 来访问会有些错误的。虽然 FSO 可以标识那些没有准备好的磁盘,但是你访问它的一些属性的时候会报错出来,比如 AvailableSpace 或 FreeSpace。如果磁盘没有准备好,你只可以访问如下的四个属性:DriveLetter、DriveType、IsReady、ShareName。所有尝试访问其它属性都会报错。
幸运的是,IsReady 属性允许你用脚本来检查一个磁盘是否准备好了。IsReady 返回一个 Boolean 值,如果这个值是true,则磁盘准好了,你可以访问它的所有属性,否则如果这个值是false,则磁盘没有准备好,只能返回上面的四个属性了。可以对每个磁盘,用 IsReady 属性来保证磁盘是准备好的。如果是就返回磁盘的盘符和剩余空间,如果不是就只返回磁盘的盘符。
1 Set objFSO = CreateObject("Scripting.FileSystemObject")
2 Set colDrives = objFSO.Drives
3 For Each objDrive in colDrives
4 If objDrive.IsReady = True Then
5 Wscript.Echo "Drive letter: " & objDrive.DriveLetter
6 Wscript.Echo "Free space: " & objDrive.FreeSpace
7 Else
8 Wscript.Echo "Drive letter: " & objDrive.DriveLetter
9 End If
10Next
此问题不会发生在 WMI 上(如果软盘或者光驱中没有盘,脚本就会失败),WMI 只是认为返回的空间为 Null 。