标题: [其他] [已解决]帮我看下“查找快捷方式所指向目标.bat”那里出了问题,谢谢 [打印本页]
作者: yyz219 时间: 2022-12-28 08:14 标题: [已解决]帮我看下“查找快捷方式所指向目标.bat”那里出了问题,谢谢
本帖最后由 yyz219 于 2022-12-30 12:25 编辑
最佳方案:
(主要这些代码能够在PE中运行)
快捷方式所指向目标保存文本.bat
- ::【拖到这里:快捷方式所指向目标保存文本"#.txt"】
- @echo off
- >"快捷方式所指向目标保存文本.vbs" echo Set oWshShell = CreateObject("WScript.Shell")
- >>"快捷方式所指向目标保存文本.vbs" echo Set oWshShortcut = oWshShell.CreateShortcut("%~1")
- >>"快捷方式所指向目标保存文本.vbs" echo Dim fso, MyFile
- >>"快捷方式所指向目标保存文本.vbs" echo Set fso = CreateObject("Scripting.FileSystemObject")
- >>"快捷方式所指向目标保存文本.vbs" echo Set MyFile = fso.CreateTextFile("#.txt", True)
- >>"快捷方式所指向目标保存文本.vbs" echo MyFile.WriteLine(oWshShortcut.TargetPath)
- >>"快捷方式所指向目标保存文本.vbs" echo MyFile.Close
-
- 快捷方式所指向目标保存文本.vbs
- del /q 快捷方式所指向目标保存文本.vbs
- exit
复制代码
********************************
原来的问题:
查找快捷方式所指向目标.bat- @echo off&setlocal enabledelayedexpansion
- set /p T=【右键】粘贴.lnk路径:
- for /f "tokens=* delims=" %%i in ('type "%T%"^|find ":\"') do (
- set /a n=n%%2+1
- if !N! equ 2 echo %%i
- )
- pause
复制代码
要达到的效果:输入快捷方式路径(含扩展名),能够显示出快捷方式所指向目标
**********************************************************
实际情况:
1.输入:D:\桌面\Desktop\Dism++.lnk,能够正确显示
2.输入:D:\桌面\Desktop\关机.lnk,没有显示
另外,如果文件路径中有 !号,也不能够正确显示(!号丢失)
*************************************************************
上面两个快捷方式实际所指向目标是:
D:\桌面\Desktop\Dism++.lnk————"D:\1绿色软件\bat批处理\C盘使用情况 -Dism++x64-.bat"
D:\桌面\Desktop\关机.lnk——————D:\1绿色软件\bat批处理\注销+重新启动\关机.bat
————————————————————————————————————————————
问题不知道出现在哪里?谢谢
作者: 77七 时间: 2022-12-28 10:37
本帖最后由 77七 于 2022-12-28 10:39 编辑
- @echo off
- set /p T=【右键】粘贴.lnk路径:
- for /f "delims=" %%i in ('type %T%^|find ":\"') do (
- set "mubiao=%%i"
- )
- echo "%mubiao%"
- pause
复制代码
不知道改的对不对,我自己试了几个没问题 复制路径带上引号,如果不带就把%T%加引号
开延迟变量,!就会被省略
数学不太好...看不懂那个公式,是固定运行几次的意思?
作者: hfxiang 时间: 2022-12-28 10:41
试这个- @echo off
- @rem 保存为ANSI格式
- for /f "tokens=* delims=" %%a in ('type "%~1"^|find ":\"') do set dp=%%~a
- echo;%dp%
- pause
复制代码
作者: yyz219 时间: 2022-12-28 10:44
回复 3# hfxiang
非常感谢,试一试先
作者: hfxiang 时间: 2022-12-28 10:45
补充一下,是直接拖放.lnk文件到脚本上即可,不用手工录入路径
作者: yyz219 时间: 2022-12-28 10:49
试这个
hfxiang 发表于 2022-12-28 10:41
! 号问题解决了
********************************
但是,对 D:\桌面\Desktop\关机.lnk 显示不对
显示:
/D:\
请按任意键继续. . .
作者: hfxiang 时间: 2022-12-28 10:52
回复 6# yyz219
请问“D:\ 桌面 \Desktop\ 关机.lnk”的快捷方式能正常正常运行吗?
作者: yyz219 时间: 2022-12-28 10:55
回复 yyz219
请问“D:\ 桌面 \Desktop\ 关机.lnk”的快捷方式能正常正常运行吗?
hfxiang 发表于 2022-12-28 10:52
能够正常运行的
作者: yyz219 时间: 2022-12-28 10:56
不知道改的对不对,我自己试了几个没问题 复制路径带上引号,如果不带就把%T%加引号
开延迟变量,!就会被 ...
77七 发表于 2022-12-28 10:37
非常感谢 我试一试先
作者: yyz219 时间: 2022-12-28 11:01
不知道改的对不对,我自己试了几个没问题 复制路径带上引号,如果不带就把%T%加引号
开延迟变量,!就会被 ...
77七 发表于 2022-12-28 10:37
! 号问题解决了
********************************
但是,对 D:\桌面\Desktop\关机.lnk 显示不对
显示:
/D:\
请按任意键继续. . .
(加 引号也不能够解决问题)
作者: 77七 时间: 2022-12-28 11:03
回复 10# yyz219
D:\桌面\Desktop\Dism++.lnk 这个正常?你重新创建“关机”的快捷方式试一试
作者: yyz219 时间: 2022-12-28 11:12
回复 yyz219
D:\桌面\Desktop\Dism++.lnk 这个正常?你重新创建“关机”的快捷方式试一试
77七 发表于 2022-12-28 11:03
重新创建“关机”的快捷方 两个都正常
作者: Batcher 时间: 2022-12-28 11:28
回复 6# yyz219
打开一个CMD窗口,执行:
type "D:\桌面\Desktop\关机.lnk" | find ":\"
就会发现这个有问题的lnk文件跟其他lnk文件不一样
作者: yyz219 时间: 2022-12-28 11:30
回复 yyz219
打开一个CMD窗口,执行:
type "D:\桌面\Desktop\关机.lnk" | find ":\"
就会发现这个 ...
Batcher 发表于 2022-12-28 11:28
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
C:\Users\Administrator>type "D:\桌面\Desktop\关机.lnk" | find ":\"
/D:\
C:\Users\Administrator>
作者: Batcher 时间: 2022-12-28 11:38
回复 10# yyz219 - @echo off
- powershell "$objShell = New-Object -ComObject WScript.Shell; $objShell.CreateShortcut('D:\桌面\Desktop\关机.lnk').TargetPath"
- pause
复制代码
作者: Batcher 时间: 2022-12-28 11:45
回复 14# yyz219
lnk文件不是纯文本文件,使用 type "xxx.lnk" | find ":\" 大部分情况下能成功的原因是巧合。
少数lnk文件无法用这个方法得到想要的结果。
作者: yyz219 时间: 2022-12-28 11:57
回复 yyz219
Batcher 发表于 2022-12-28 11:38
我试一试先 感谢
作者: yyz219 时间: 2022-12-28 12:06
回复 yyz219
Batcher 发表于 2022-12-28 11:38
成功了
就是太慢
能够加快速度吗?
作者: terse 时间: 2022-12-28 12:19
试试这样呢- @echo off
- set /p T=【右键】粘贴.lnk路径
- for /f "delims=" %%i in ('find ":" "%t%" ^|findstr /r "^[A-z]:[\\]"') do (
- echo "%%~dpi"
- )
- pause
复制代码
作者: yyz219 时间: 2022-12-28 13:46
试试这样呢
terse 发表于 2022-12-28 12:19
我试一试先 谢谢
作者: yyz219 时间: 2022-12-28 13:56
试试这样呢
terse 发表于 2022-12-28 12:19
这样显示的是:快捷方式所指向目标所在目录
作者: terse 时间: 2022-12-28 17:00
回复 21# yyz219
这样呢 echo "%%i"
作者: yyz219 时间: 2022-12-28 17:21
回复 yyz219
这样呢 echo "%%i"
terse 发表于 2022-12-28 17:00
我在试一试 谢谢
作者: yyz219 时间: 2022-12-28 17:29
回复 yyz219
这样呢 echo "%%i"
terse 发表于 2022-12-28 17:00
能够显示快捷方式所指向的目标了
但是,一样是有一些快捷方式没有显示
作者: terse 时间: 2022-12-28 18:26
回复 24# yyz219
正如16楼B版主解释 部分INK文件无用?
直接FIND呢- for /f "eol=/ delims=" %%i in ('find ":\" ^<"%t%"') do echo;%i
复制代码
作者: yyz219 时间: 2022-12-28 18:29
回复 yyz219
正如16楼B版主解释 部分INK文件无用?
直接FIND呢
terse 发表于 2022-12-28 18:26
我试一试 谢谢
作者: yyz219 时间: 2022-12-28 18:33
回复 yyz219
正如16楼B版主解释 部分INK文件无用?
直接FIND呢
terse 发表于 2022-12-28 18:26
@echo off
for /f "eol=/ delims=" %%i in ('find ":\" ^<"%1"') do echo;%%i
pause >nul
exit
用上面代码,一样有一些快捷方式不行
作者: czjt1234 时间: 2022-12-28 18:41
回复 27# yyz219
16楼已经说得很清楚了
要么用ps,要嫌ps慢就得vbs
作者: yyz219 时间: 2022-12-28 18:45
本帖最后由 yyz219 于 2022-12-28 18:47 编辑
回复 yyz219
16楼已经说得很清楚了
要么用ps,要嫌ps慢就得vbs
czjt1234 发表于 2022-12-28 18:41
vbs又是怎样的的?谢谢
作者: czjt1234 时间: 2022-12-28 18:56
本帖最后由 czjt1234 于 2022-12-28 18:59 编辑
- s = CreateObject("htmlfile").parentWindow.clipboardData.getData("text")
- s = InputBox("【右键】粘贴.lnk路径", , s)
- Set oWshShell = CreateObject("WScript.Shell")
- Set oWshShortcut = oWshShell.CreateShortcut(s)
- MsgBox oWshShortcut.TargetPath
复制代码
作者: yyz219 时间: 2022-12-28 19:08
czjt1234 发表于 2022-12-28 18:56
我试一试先 谢谢
作者: yyz219 时间: 2022-12-28 19:27
本帖最后由 yyz219 于 2022-12-28 19:32 编辑
czjt1234 发表于 2022-12-28 18:56
成功,速度不错
**************************
1.我现在不想粘贴.lnk的路径,将 D:\桌面\Desktop\关机.lnk 直接写入里面(双击就出结果)
2.将结果保存为:#.txt
(不要有任何显示、对话框)
代码应该怎么样?谢谢
作者: terse 时间: 2022-12-28 19:53
WScript.Shell 解决部分问题 某些情况下可以用ADODB.Stream处理一下- 1>1/* :
- @echo off
- cscript //E:JScript //nologo "%~f0">#.txt
- exit
- */
- var ph = new ActiveXObject('htmlfile').parentWindow.clipboardData.getData('Text');
- var ws = new ActiveXObject("WScript.Shell");
- WSH.Echo(ws.CreateShortcut(ph).TargetPath);
复制代码
作者: yyz219 时间: 2022-12-28 19:55
WScript.Shell 解决部分问题 某些情况下可以用ADODB.Stream处理一下
terse 发表于 2022-12-28 19:53
我试一试 谢谢
作者: yyz219 时间: 2022-12-28 19:58
WScript.Shell 解决部分问题 某些情况下可以用ADODB.Stream处理一下
terse 发表于 2022-12-28 19:53
我不知道怎么使用
作者: terse 时间: 2022-12-28 22:54
我不知道怎么使用
yyz219 发表于 2022-12-28 19:58
存为bat文件
作者: yyz219 时间: 2022-12-29 08:30
存为bat文件
terse 发表于 2022-12-28 22:54
运行?拖到图标?
作者: czjt1234 时间: 2022-12-29 09:01
本帖最后由 czjt1234 于 2022-12-29 09:02 编辑
回复 32# yyz219
- s = "D:\桌面\Desktop\关机.lnk"
- f = "#.txt"
-
- Set oWshShell = CreateObject("WScript.Shell")
- Set oWshShortcut = oWshShell.CreateShortcut(s)
- s = oWshShortcut.TargetPath
- Set oFSO = CreateObject("Scripting.FileSystemObject")
- Set oTextStream = oFSO.OpenTextFile(f, 2, True)
- oTextStream.Write s
- oTextStream.Close()
复制代码
作者: yyz219 时间: 2022-12-29 11:05
回复 yyz219
czjt1234 发表于 2022-12-29 09:01
非常感谢 问题解决了
作者: terse 时间: 2022-12-29 11:51
看你已解决了,还是发上来吧,应该符合你的需求,保存为BAT文件 直接运行- 1>1/* : @echo off &cscript //E:JScript //nologo "%~f0" "D:\桌面\Desktop\关机.lnk" >#.txt &exit */
- WSH.Echo(new ActiveXObject("WScript.Shell").CreateShortcut(WSH.Arguments(0)).TargetPath);
复制代码
回复 37# yyz219
作者: yyz219 时间: 2022-12-29 13:28
看你已解决了,还是发上来吧,应该符合你的需求,保存为BAT文件 直接运行回复 yyz219
terse 发表于 2022-12-29 11:51
非常感谢 我试一试
作者: yyz219 时间: 2022-12-29 13:33
看你已解决了,还是发上来吧,应该符合你的需求,保存为BAT文件 直接运行回复 yyz219
terse 发表于 2022-12-29 11:51
如果 前面和后面,还有代码就不行吗?
作者: WHY 时间: 2022-12-30 12:00
- @echo off
- set "Lnk=D:\桌面\Desktop\关机.lnk"
- for /f "delims=" %%i in ('wmic Path Win32_ShortcutFile where "Name='%Lnk:\=\\%'" get target /format:List ^| find ":"') do (
- set "%%i"
- )
- echo;%target%
- pause
复制代码
作者: yyz219 时间: 2022-12-30 12:14
WHY 发表于 2022-12-30 12:00
辛苦了,非常感谢
作者: yyz219 时间: 2022-12-30 12:22
WHY 发表于 2022-12-30 12:00
正常系统中正常
在weiPE中不行
作者: WHY 时间: 2022-12-30 23:31
本帖最后由 WHY 于 2022-12-31 10:05 编辑
正常系统中正常
在weiPE中不行
yyz219 发表于 2022-12-30 12:22
weiPE 指"微PE"是吗?
原版微PE肯定是不支持WMIC的,更不支持PowerShell、VBS脚本
如果你的WinPE支持VBS,那就直接用VBS脚本,没必要弄个临时文件再转成BAT
这样也许能行(前提是:你的WinPE支持mshta协议):- @echo off
- REM 把Lnk文件拖到这里
- mshta VBScript:Execute("s=CreateObject(""WScript.Shell"").CreateShortcut(""%~f1"").TargetPath:CreateObject(""Scripting.FileSystemObject"").OpenTextFile(""#.txt"",2,True).Write(s):close")
复制代码
作者: yyz219 时间: 2022-12-31 07:45
weiPE 指"微PE"是吗?
原版微PE肯定是不支持WMIC的,更不支持PowerShell、VBS脚本
如果你的Win ...
WHY 发表于 2022-12-30 23:31
非常感谢
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |