如何查找文件路径

3
最终,我尝试返回Robocopy.exe的“产品版本”(以避免使用XP026; 错误返回代码)。我可以使用Shell.ApplicationNameSpaceParseName来获取“产品版本”,但需要事先知道NameSpace(文件夹|目录|路径)。
由于脚本将在不同的计算机上运行,并且Robocopy.exe可能位于系统PATH环境变量中列出的一个或多个目录中,因此我无法将NameSpace路径写入脚本。我只对在PATH中找到的感兴趣,而且会作为WScript.Shell Run方法执行的实例。当未指定绝对路径时,WScript.Shell Run将执行系统搜索路径中找到的第一个实例。这就是我想要找到的实例。
我的备选方案是使用where.exe程序查找Robocopy.exe的完整路径,并使用WScript.Shell Exec oExec.StdOut将其返回到我的vbs脚本,然后提取路径以用作上面代码中的NameSpace
我一直在搜索winapi searchpath函数/方法的vbs或com控件实现,但没有成功。我很惊讶FileSystemObject或Shell.Application中还没有实现它。感谢任何帮助,推荐或想法。
1个回答

1

要搜索给定文件的PATH变量,您需要获取变量的值,将其按“;”字符拆分为数组,然后循环遍历目录路径数组,检查每个目录是否包含您要搜索的文件。但是,您也可以使用CMD一行代码来实现:

sFileName = "robocopy.exe"

Set oShell = WScript.CreateObject("WScript.Shell")

' this will find the file that will be actually run from command line when typed without qualified path
Set oExec = oShell.Exec("cmd /c for %G in (""" & sFileName & """) do @echo.%~$PATH:G")

' this will find all occurances of the file in directories listed in PATH
'Set oExec = oShell.Exec("cmd /c for %G in (""%path:;="" ""%"") do @if exist ""%~dpfxG\" & sFileName & """ echo %~dpfxG\" & sFileName)

Do
  line = oExec.StdOut.ReadLine()
  WScript.Echo line
  ' here you can examine the file

Loop While Not oExec.Stdout.atEndOfStream

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接