如何确定计算机上是否存在某个文件夹?

来源:百度文库 编辑:神马文学网 时间:2024/04/29 08:22:21
问:
嗨,Scripting Guy!有没有办法确定计算机上是否存在某个特定的文件夹?
-- RP, Umatilla, OR
答:
您好,RP.实现这个目的的方法很多,具体使用哪一种方法取决于计算机是本地计算机还是远程计算机,以及您是否知道文件夹的准确路径。让我们从最简单的一种情况开始:您在本地计算机上寻找文件夹“C:\Scripts”。
为什么说这很容易呢?FileSystemObject 提供了一个 FolderExists 方法,可以通过它了解某个文件夹是否存在。您需要做的就是运行该方法,然后把路径“C:\Scripts”传递给它。如果该方法返回“True”,那么文件夹存在;如果返回“False”,说明文件夹不存在。
以下是具体的实现代码:
Set objFSO = CreateObject("Scripting.FileSystemObject")If objFSO.FolderExists("C:\Scripts") ThenWscript.Echo "The folder exists."ElseWscript.Echo "The folder does not exist."End If
好,但是如果是在远程计算机上寻找某个文件夹又会怎样呢?毕竟,FileSystemObject 被设计为在本地运行。好的,在这种情况下,需要使用 WMI 类 Win32_Directory ,并且寻找名称为“C:\\Scripts”的文件夹。
说明:这里并不是一个打字错误。在使用 WMI 寻找文件和文件夹的时候,查询中的任何“\”都必须被“\\”替换。如果您要寻找“C:\Scripts\MyScripts\AdminScripts”,那么查询看起来应当是这样的:
"Select * From Win32_Directory Where Name = " & _"‘C:\\Scripts\\MyScripts\\AdminScripts‘"
此示例脚本检查远程计算机 atl-ws-01 上是否存在文件夹“C:\Scripts”。我如何知道文件夹是否存在呢?好的,脚本会返回 Count(所找到项目的数量)。如果 Count = 0,那么 C:\Scripts 不存在;如果 Count = 1,那么 C:\Scripts 确实 存在。
strComputer = "atl-ws-01"Set objWMIService = GetObject _("winmgmts:\\" & strComputer & "\root\cimv2")Set colFolders = objWMIService.ExecQuery _("Select * From Win32_Directory Where " & _"Name = ‘C:\\Scripts‘")Wscript.Echo colFolders.Count
Ok,现在看一种比较难的情况:如果您要寻找一个名为 Scripts 的文件夹,但是不知道它究竟是在 C 盘、D盘或者其他哪个盘上又该怎样做呢?换句话说,您无法搜索一个像“C:\Scripts”这样的具体路径。没有关系;可以使用 WMI 搜索 FileName 属性为 Scripts 的文件夹( FileName 属性等价于我们所要称呼的文件夹名称)。由于必须搜索整个文件系统,脚本可能需要花上 1 分钟左右的时间才能运行完成(具体时间视计算机上文件夹的数量而定),但是的确可以实现我们的目标:
strComputer = "atl-ws-01"Set objWMIService = GetObject _("winmgmts:\\" & strComputer & "\root\cimv2")Set colFolders = objWMIService.ExecQuery _("Select * From Win32_Directory Where " & _"FileName = ‘Scripts‘")Wscript.Echo colFolders.Count
顺便提一下,这个脚本可以本地运行,也可以远程运行。注意,脚本很可能会返回一个以上的项目;因为很多文件夹都有名为名为 Scripts 的文件夹,即便是路径各不相同:
C:\Documents and Settings\All Users\Documents\Corporate\ScriptsC:\ScriptsD:\Administrative Tools\ScriptsE:\WMI\Scripts