找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 12708|回复: 5

VBS如何取得文件绝对位置

[复制链接]
发表于 2009-7-22 14:17:19 | 显示全部楼层 |阅读模式
請教各位要取得文件名稱的位置
就像是批處理中的For %%a in (123.exe) do echo %%~$path:a

vbs中要怎麼寫?
发表于 2009-7-22 15:03:27 | 显示全部楼层
FSO对象GetFile后。。。有属性
 楼主| 发表于 2009-7-22 15:19:49 | 显示全部楼层
请问是哪一个属性可以做到?

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有试过不行
 楼主| 发表于 2009-7-22 15:32:49 | 显示全部楼层
举个例好了有例子好理解

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有没有甚么方式可以达到的?
发表于 2009-7-22 18:00:10 | 显示全部楼层
你这个……是要文件名找文件。。。是查找。。。
由于要系统能直接找到,所以一定在系统PATH目录下面。

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


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

里面的路径是用;分开的
所以你split下,然后用每个系统路径+dllname
去判断存在性,如果存在就输出了。
%~$PATH:I 是一种扩充。。。。
 楼主| 发表于 2009-7-23 01:02:32 | 显示全部楼层
这样我大概知道了,非常感谢

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


这样好像有点小问题,找时间在改
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 05:29 , Processed in 0.018416 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表