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

[其他] 求优化批处理“lnk指向目标(拖).bat”。谢谢

[复制链接]
发表于 2025-3-20 19:59:27 | 显示全部楼层 |阅读模式
本帖最后由 yyz219 于 2025-3-22 09:51 编辑

暂时方案,求更好的

@echo off
::【获取:lnk指向目标】
echo.WSH.echo CreateObject("WScript.Shell").CreateShortcut(WSH.Arguments(0)).targetpath>#
for /f "delims=" %%a in ('cscript -nologo -e:vbscript # "%~1"') do echo. %%a &del #
pause>nul 2>nul
=====================================================
问题:
lnk指向目标(拖).bat:(忘记说了:是 PE 环境)
  1. @echo off
  2. ::【获取:lnk指向目标路径】
  3. >"%tmp%\t.t" echo;WSH.echo CreateObject("WScript.Shell").CreateShortcut(WSH.Arguments(0)).targetpath & for /f "delims=" %%a in ('cscript -nologo -e:vbscript "%tmp%\t.t" "%~1"') do echo.%%a
  4. pause>nul 2>nul
复制代码
===========================================================
这个bat能够正确识别 拖到 “lnk指向目标(拖).bat”图标的快捷方式 指向目标路径。
我觉得这代码有一点长,不知道还能不能优化、精简?谢谢

需求:让代码短一些(同样的效果),显示部分要有:echo. (方便与其它代码连接)
发表于 2025-3-20 21:29:33 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-3-21 09:58 编辑

回复 1# yyz219

存为 test.bat 运行,省略了临时文件(用 mshta 代码亦可省略临时文件但会导致屏闪)...

  1. @set @v=1 //&(for /f "delims=" %%a in ('cscript -e:jscript "%~f0" "%~1"') do @echo,%%a)&pause&exit/b
  2. WSH.echo(WSH.createObject('WScript.Shell').createShortcut(WSH.arguments(0)).targetpath)
复制代码

评分

参与人数 1技术 +1 收起 理由
yyz219 + 1 乐于助人

查看全部评分

 楼主| 发表于 2025-3-21 06:49:59 | 显示全部楼层
回复 2# aloha20200628


    谢谢
 楼主| 发表于 2025-3-21 07:04:59 | 显示全部楼层
回复 2# aloha20200628


1.路径显示了两次
2.还显示了不想看到的
发表于 2025-3-21 09:53:27 | 显示全部楼层
回复 4# yyz219

二楼代码已订正...

评分

参与人数 1技术 +1 收起 理由
yyz219 + 1 乐于助人

查看全部评分

 楼主| 发表于 2025-3-21 10:02:24 | 显示全部楼层
回复 5# aloha20200628


    谢谢
 楼主| 发表于 2025-3-21 10:12:15 | 显示全部楼层
本帖最后由 yyz219 于 2025-3-21 10:13 编辑

回复 5# aloha20200628

@echo off
@set @v=1 //&(for /f "delims=" %%a in ('cscript -e:jscript "%~f0" "%~1"') do @echo,%%a)&pause&exit/b
WSH.echo(WSH.createObject('WScript.Shell').createShortcut(WSH.arguments(0)).targetpath)
pause >nul
exit

====================================================================
前面、后面加代码后,会出错

不能够跟其它代码合作哦
发表于 2025-3-21 10:35:42 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-3-21 10:49 编辑

回复 7# yyz219

这是 bat+jscript 混码结构的批处脚本文件,要在其中增加批处代码,可参考以下打散的代码结构,首行和末尾两行不要动,在1-5行以内加入你的批处代码即可...

  1. 2>1/* ::
  2. @echo off
  3. for /f "delims=" %%a in ('cscript -e:jscript "%~f0" "%~1"') do echo,%%a
  4. pause&exit/b
  5. */
  6. WSH.echo(WSH.createObject('WScript.Shell').createShortcut(WSH.arguments(0)).targetpath)
复制代码

评分

参与人数 1技术 +1 收起 理由
yyz219 + 1 乐于助人

查看全部评分

发表于 2025-3-21 10:41:40 | 显示全部楼层
本帖最后由 smss 于 2025-3-21 10:52 编辑
  1. @echo off&(for /f "delims=" %%i in ('find ":" %1 ^|findstr /r "^[A-z]:[\\]"')do echo "%%i")&pause
复制代码

评分

参与人数 1技术 +1 收起 理由
yyz219 + 1 乐于助人

查看全部评分

 楼主| 发表于 2025-3-21 10:44:54 | 显示全部楼层
回复 9# smss


    我试一试先 谢谢
 楼主| 发表于 2025-3-21 10:54:05 | 显示全部楼层
本帖最后由 yyz219 于 2025-3-21 11:19 编辑

回复 9# smss


    没有显示(忘记说了:是 PE 环境)


删除 @echo off 后

 楼主| 发表于 2025-3-21 10:57:55 | 显示全部楼层
回复 8# aloha20200628

谢谢
发表于 2025-3-22 11:05:31 | 显示全部楼层
回复 1# yyz219

楼主还要寻求更短的代码吗?
复查了早至2008年的外网老帖,已有用 find+findstr ‘暴力读取’ 直接从 *.lnk 文件获得目标字符串的方法,代码量更少,但用于某些类别的快捷方式可能会有兼容性问题...以下给出一版针对本帖的代码,如 winPE 系统可用 find.exe,findstr.exe,应该可以一试...
存为 test.bat 直接用快捷方式拖入即可,或用命令行 test.bat "c:\abc\xyz.lnk" 运行即可

  1. @echo off &for /f "delims=" %%a in ('find ":" "%~f1"^|findstr /br ".:" ') do echo,%%a
  2. pause&exit/b
复制代码

评分

参与人数 1技术 +1 收起 理由
yyz219 + 1 乐于助人

查看全部评分

 楼主| 发表于 2025-3-22 11:15:47 | 显示全部楼层
回复 13# aloha20200628


    谢谢 我试一试先
 楼主| 发表于 2025-3-22 11:29:11 | 显示全部楼层
回复 13# aloha20200628


     我的 winPE 系统可用 find.exe,findstr.exe 都有

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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