标题: [求助] 如何取出lnk内的实际路径 (VBS)
[打印本页]
作者: sylovanas
时间: 2008-4-1 22:41
标题: [求助] 如何取出lnk内的实际路径 (VBS)
搜索过文批处理可用find ":\"来处理
但常常会碰到如
W
i
n
d
o
w
s
\
1
2
3
.
e
x
e
C:\
C:\windows\123.exe
上面位置不一定排序不一定
但我只要取123.exe那一行,目前判断是没办法所以想用vbs来提取看看
但vbs我不懂不知道有没有高人可以帮忙处理看看
作者: abcd
时间: 2008-4-2 01:23
set WshShell = WScript.CreateObject("WScript.Shell")
if wscript.arguments.length=0 then msgbox("请直接拖动快捷方式至其上"):wscript.quit
for each arg in wscript.arguments
set oShellLink = WshShell.CreateShortcut(arg)
msgbox oShellLink.TargetPath
next
set oShellLink=nothing
set Wshell=nothing
作者: abcd
时间: 2008-4-2 02:00
@echo off
more "%~s1"|findstr ":\\."
pause>Nul
作者: sylovanas
时间: 2008-4-2 02:02
感谢
如果说要将他结果自动写入文件的话要怎么改呢?
是不是改 msgbox oShellLink.TargetPath 这一段?
作者: sylovanas
时间: 2008-4-2 02:07
这个是我之前写的代码,用来抓启动内的快捷
不过有部分快捷会有问题
有用第三方工具sed和grep
dir /a/b "%startup%" >.\temp\startup1.1
for /f "tokens=*" %%a in (.\temp\startup1.1) do echo %startup%\%%a>>.\temp\startup1.2
dir /a/b "%startup1%" >.\temp\startup1.1
for /f "tokens=*" %%a in (.\temp\startup1.1) do echo %startup1%\%%a>>.\temp\startup1.2
if exist .\temp\startup1.2 for /f "tokens=*" %%a in (.\temp\startup1.2) do echo %%~a|grep -iq "\.lnk$" && (
find ":\" "%%~a"|sed -r "s/^ +//;/^.:\\/!d" >.\temp\startup1.3
echo %%~taa %%~a>>.\temp\startup1.5
for /f "tokens=*" %%g in (.\temp\startup1.3) do echo %%~tag %%~g|sed "s/.*/ => &/" >>.\temp\startup1.5
) || (echo %%~taa %%~a)>>.\temp\startup1.5
if exist .\temp\startup1.5 sed "s/^ => .*$/&\n/" .\temp\startup1.5|more >>log.txt
作者: sylovanas
时间: 2008-4-2 02:11
Quote: |
Originally posted by abcd at 2008-4-2 02:07 AM:
[code]set WshShell = WScript.CreateObject("WScript.Shell")
if wscript.arguments.length=0 then msgbox("请直接拖动快捷方式至其上"):wscript.quit
set fso=createobject( ... |
|
刚刚测试这一段
结果跳出
行:3
字元:1
错误:activex 元件无法产生物件: 'scripting.filesystemobjec'
程式码:800a01aD
来源:Microsoft VBScript 执行阶段错误
作者: abcd
时间: 2008-4-2 02:19
@echo off
for /f "tokens=*" %%i in ('dir /b /s "%userprofile%\「开始」菜单\程序\启动\*.lnk" "%allusersprofile%\「开始」菜单\程序\启动\*.lnk" 2^>nul') do (
more "%%i"|findstr ":\\."
)
pause>Nul
作者: sylovanas
时间: 2008-4-2 02:26
Quote: |
Originally posted by abcd at 2008-4-2 02:19 AM:
[code]@echo off
for /f "tokens=*" %%i in ('dir /b /s "%userprofile%\“开始”菜单\程序\启动\*.lnk" "%allusersprofile%\“开始”菜单\程序\启动\*.lnk" ... |
|
感谢
这样的方式我有做过,但还是有部分快捷没有办法正确抓到。
我将没有抓到正确的内容贴上来
L
F
u
P誁??iJ
+00?
/C:\
N
1
Program Files
2
嚝
P
r
o
g
r
a
m
F
i
l
e
s
L
1
Common Files
0
嚝
C
o
m
m
o
n
F
i
l
e
s
B
1
VideoMate
*
嚝
V
i
d
e
o
M
a
t
e
j
2
ComproSchedulerDTV.exe
D
嚝
C
o
m
p
r
o
S
c
h
e
d
u
l
e
r
D
T
V
.
e
x
e
&
J
.
.
\
.
.
\
.
.
\
.
.
\
.
.
\
P
r
o
g
r
a
m
F
i
l
e
s
\
C
o
m
m
o
n
F
i
l
e
s
\
V
i
d
e
o
M
a
t
e
\
C
o
m
p
r
o
S
c
h
e
d
u
l
e
r
D
T
V
.
e
x
e
?
{
这是用more lnk档|findstr "."找的
如果findstr 改成findstr ":\\."就不会找到任何东西
作者: sylovanas
时间: 2008-4-2 02:31
Quote: |
Originally posted by abcd at 2008-4-2 02:22 AM:
不好意思,手误,拼写错误了。现已改正。
未测试 |
|
感谢
不过刚刚有再测试
这一次跳
行:4
字元:40
错误:无法判定字串常数的结尾
程式码:800A0409
[
Last edited by sylovanas on 2008-4-2 at 02:41 AM ]
作者: sylovanas
时间: 2008-4-2 02:41
好
不过lnk档直接压缩似乎有问题的样子
我先将副档名改为lnk1,下载之后先将副档名改回lnk之后在测试
http://upload.cn-dos.net/img/210.rar
[
Last edited by sylovanas on 2008-4-2 at 02:44 AM ]
作者: sylovanas
时间: 2008-4-2 02:51
是的该档案连接是有效的
连接的档案也要吗?
那我就一并上传试看看了
http://upload.cn-dos.net/img/211.rar
放置的位置是在
%CommonProgramFiles%\VideoMate
这个是那个快捷连接的主档案
[
Last edited by sylovanas on 2008-4-2 at 02:52 AM ]
作者: abcd
时间: 2008-4-2 03:01
发现只要快捷方式的"起始位置“为空,
用more "%~s1"|findstr ":\\."
确实不能获取路径的。
填上位置后,就可以了。
即使再次删除起始位置,一样也能找到的
[
Last edited by abcd on 2008-4-2 at 03:05 AM ]
作者: sylovanas
时间: 2008-4-2 03:18
晕
真是怪
还是非常感谢abcd
这个批次要用在很多台电脑上面的,没办法说手动去增加起始位置是比较麻烦的地方
abcd也早点休息吧,太晚睡对身体不好
作者: nikekkaa
时间: 2008-5-27 13:19
找了半天,没想到就在身边~谢谢2楼分享的.