Board logo

标题: VBS如何取得文件绝对位置 [打印本页]

作者: sylovanas    时间: 2009-7-22 14:17     标题: VBS如何取得文件绝对位置

請教各位要取得文件名稱的位置
就像是批處理中的For %%a in (123.exe) do echo %%~$path:a

vbs中要怎麼寫?
作者: slore    时间: 2009-7-22 15:03

FSO对象GetFile后。。。有属性
作者: sylovanas    时间: 2009-7-22 15:19

请问是哪一个属性可以做到?

Attributes 属性 | AvailableSpace 属性 | DateCreated 属性 | DateLastAccessed 属性 | DateLastModified 属性 | Drive 属性 | DriveLetter 属性 | DriveType 属性 | Files 属性 | FileSystem 属性 | FreeSpace 属性 | IsReady 属性 | IsRootFolder 属性 | Name 属性 | ParentFolder 属性 | RootFolder 属性 | SerialNumber 属性 | ShareName 属性 | ShortName 属性 | ShortPath 属性 | Size 属性 | SubFolders 属性 | TotalSize 属性 | Type 属性 | VolumeName 属性

path有试过不行
作者: sylovanas    时间: 2009-7-22 15:32

举个例好了有例子好理解

const HKLM = &H80000002
SET objREG = Getobject("winmgmts:\\.\Root\default:StdRegProv")
strkey = "Software\Microsoft\Windows nt\Currentversion\Winlogon\Notify"
objREG.EnumKey HKLM , strkey , arrsubkey
        For Each subkey In arrsubkey
                objREG.GetStringValue HKLM , strkey & "\" & subkey , "DllName" , strvalue
                keys = keys & strvalue & vbcrlf
        Next

wscript.echo keys


取得的结果可能为
crypt32.dll
cryptnet.dll
cscdll.dll
C:\WINDOWS\System32\dimsntfy.dll
wlnotify.dll
wlnotify.dll
sclgntfy.dll
WlNotify.dll
wlnotify.dll
wlnotify.dll


C:\WINDOWS\System32\dimsntfy.dll是没问题
问题在像
wlnotify.dll
sclgntfy.dll
这几个只知文件名但不知文件位置的

如果用批处理的For语法就是
For %%a in (
crypt32.dll
cryptnet.dll
cscdll.dll
C:\WINDOWS\System32\dimsntfy.dll
wlnotify.dll
wlnotify.dll
sclgntfy.dll
WlNotify.dll
wlnotify.dll
wlnotify.dll
) do echo %%~$path:a


这样就会读取环境变量作到读取文件位置的效果
我这里想要的就是这样的效果,vbs有没有甚么方式可以达到的?
作者: slore    时间: 2009-7-22 18:00

你这个……是要文件名找文件。。。是查找。。。
由于要系统能直接找到,所以一定在系统PATH目录下面。

%~$PATH:I   - 查找列在路径环境变量的目录,并将 %I 扩充
               到找到的第一个完全合格的名称。如果环境变量名
               未被定义,或者没有找到文件,此组合键会扩充到
               空字符串


你用VBS得到系统环境变量PATH

里面的路径是用;分开的
所以你split下,然后用每个系统路径+dllname
去判断存在性,如果存在就输出了。
%~$PATH:I 是一种扩充。。。。
作者: sylovanas    时间: 2009-7-23 01:02

这样我大概知道了,非常感谢

SET objFSO = Createobject("scripting.filesystemobject")
SET objWSH = Createobject("Wscript.Shell")
SET objEnv = objWSH.Environment("process")
colWinPath = SPLIT(objEnv("Path"),";")

const HKLM = &H80000002
SET objREG = Getobject("winmgmts:\\.\Root\default:StdRegProv")
strkey = "Software\Microsoft\Windows nt\Currentversion\Winlogon\Notify"
objREG.EnumKey HKLM , strkey , arrsubkey
        For Each subkey In arrsubkey
                objREG.GetStringValue HKLM , strkey & "\" & subkey , "DllName" , strvalue
                FC strvalue
                notifykey = notifykey & Chr(34) & subkey & Chr(34) & "=" & Chr(34) & FileName & Chr(34) & vbcrlf
        Next

Wscript.echo notifykey

Sub FC(FilePathName)
For Each objWinPath In colWinPath
        IF objFSO.FileExists(objWinPath & "\" & FilePathName) Then
                FileName = objWinPath & "\" & FilePathName
                Exit Sub
        End IF
Next

FileName = FilePathName & "  [File Not Found.]"
End Sub


这样好像有点小问题,找时间在改




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2