[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] BAT如何获取开始-程序里的快捷方式的起始位置?

要实现的结果是:查找一个exe文件所在的文件夹位置,然后把几个文件复制进这个文件夹。

现在已经有批处理的代码实现了这个结果,但是执行时间太长,大致方法是在全部盘符里查找该exe文件,然后复制几个文件到这个exe文件所在的文件夹,但是全盘搜索无论是用for f 还是用for d的速度都慢,所以想用更快捷的方法来执行。

更快捷的思路是这个exe文件必定会在开始-程序里有个快捷方式(安装这个软件必然的结果,无论是安装到哪个目录里),所以想直接由这个快捷方式的起始位置来快速定位到exe文件所在的文件夹,这样就不用全盘搜索了,应该会节省时间吧,

但现在的问题是不知道怎么获取这个在开始-程序里的这个快捷方式的起始位置(不是这个快捷方式所在的文件夹的位置),在坛里搜了搜,看到有获取桌面快捷方式的起始位置的帖子,但试着改了改,执行后得不到我想要的结果,还请有高手帮忙给个代码,谢谢!

1111木里的快捷方式的起始

TOP

看看究竟什么情况。。。。。。。

TOP

要排错的话 是否先直接 more "%%a" 这里 你先看有什么结果
或者 减少 findstr 搜索关键词看下

TOP

回复 31# batman


    这个我自己试验后明白了, 我就直接把 C:\Documents and Settings\All Users\「开始」菜单\程序 加到代码里了,不用变量了,
只是发生了灵异事件:
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.

C:\Documents and Settings\Administrator>cd\

C:\>cd /d C:\Documents and Settings\All Users\「开始」菜单\程序\防伪开票

C:\Documents and Settings\All Users\「开始」菜单\程序\防伪开票>dir
驱动器 C 中的卷没有标签。
卷的序列号是 D4DE-3282

C:\Documents and Settings\All Users\「开始」菜单\程序\防伪开票 的目录

2013-09-04  21:04    <DIR>          .
2013-09-04  21:04    <DIR>          ..
2005-07-04  01:11            57,344 Shortcut.exe
2013-09-04  20:41               284 新编.bat
2013-09-04  21:00               289 查找.bat
2013-09-02  19:39               315 防伪开票子系统6.0.lnk
2013-09-02  19:39               329 防伪开票软件升级.lnk
               5 个文件         58,561 字节
               2 个目录 13,606,887,424 可用字节

C:\Documents and Settings\All Users\「开始」菜单\程序\防伪开票>shortcut.exe /f:"
防伪开票子系统6.0.lnk" /a:q

[防伪开票子系统6.0.lnk]
TargetPath=E:\防伪开票\Bin\kp.exe
TargetPathExpanded=E:\防伪开票\Bin\kp.exe
Arguments=
ArgumentsExpanded=
WorkingDirectory=e:\防伪开票\Bin
WorkingDirectoryExpanded=e:\防伪开票\Bin
RunStyle=1
IconLocation=,0
IconLocationExpanded=,0
HotKey=0 (None)
Description=

The command completed successfully.

C:\Documents and Settings\All Users\「开始」菜单\程序\防伪开票>



这应该是有两个lnk文件吧,但是执行代码的结果就是什么都没有(用terse的第二段代码执行的结果是只有“按任意键继续”


@echo off
set "folder=C:\Documents and Settings\All Users\「开始」菜单\程序\防伪开票"
for /f "delims=" %%a in ('dir /b /a-d /s "%folder%\*.lnk"') do (
        for /f "delims=" %%b in ('more "%%a" ^| findstr /ib [a-z]:\\') do (
                echo "%%a" "%%b"
        )
)
pause

TOP

回复 29# llqcnw


    发现目录不对,自己修改吧,要不就用%userprofile%的上级目录,只是速度要慢点。。。
for /f "delims=" %%a in ("%userprofile%") do set "folder=%%~dpa"
1

评分人数

    • llqcnw: 技术精,耐心解答技术 + 1
***共同提高***

TOP

本帖最后由 llqcnw 于 2013-9-4 20:57 编辑

回复 28# terse





第二段代码应该是把目录里的所有lnk文件都显示出来,但是我有个目录里明明有两个lnk文件,但是就是显示不出来,用dir可以看到lnk文件,shortcut看也可以看到lnk文件的内容,

TOP

本帖最后由 llqcnw 于 2013-9-4 20:40 编辑

回复 26# batman


    真是见鬼啦

用你这段代码执行的结果是

系统找不到指定的文件。
请按任意键继续. . .

(我的腾讯QQ.lnk在C:\Documents and Settings\All Users\「开始」菜单\程序\腾讯软件\QQ2013文件夹里,
我把代码中的set "folder=%userprofile%\「开始」菜单\程序\"  改为 set "folder=%userprofile%\「开始」菜单\程序\腾讯软件\QQ2013\"
这样是对的吧? 但执行的结果就是这样。

晕,怎么 =%userprofile%变成是  C:\Documents and Settings\Administrator   不应该是C:\Documents and Settings\All Users 吗?

TOP

本帖最后由 terse 于 2013-9-4 18:15 编辑
  1. @echo off
  2. for /f "delims=" %%a in ('more "狙击.jgs.lnk" ^| findstr /ib [a-z]:\\') do set "lnk=%%a"
  3. echo %lnk%
  4. pause
复制代码
d:\我的文档\军旗\明\junqi2012_2_16_23_5.jgs
请按任意键继续. . .
  1. @echo off
  2. set "folder=%userprofile%\「开始」菜单\程序\"
  3. for /f "delims=" %%a in ('dir /b /a-d /s "%folder%\*.lnk"') do (
  4. for /f "delims=" %%b in ('more "%%a" ^| findstr /ib [a-z]:\\') do (
  5. echo "%%a" "%%b"
  6. )
  7. )
  8. pause
复制代码

TOP

回复 26# batman


   @echo off

for /f "delims=" %%a in ('find /i ":" QQ游戏.lnk ^| findstr /i "^[a-z]:"') do set QQfull=%%a

echo %QQfull%

echo.&pause

就是这段代码执行的结果,如果结果里有中文就显示 echo处于关闭状态, 如果结果中没有中文,就显示出路径了。



谢谢!我今晚试一下你给的这段代码

TOP

本帖最后由 batman 于 2013-9-4 17:45 编辑

给个示例,自己对着改吧。。。
  1. @echo off
  2. set "folder=%userprofile%\「开始」菜单\程序\"
  3. for /f "delims=" %%a in ('dir /a-d /b /s "%folder%腾讯QQ.lnk"') do (
  4.   for /f "delims=" %%b in ('type "%%a"^|find /i ".exe"') do set "getpath=%%~dpb"
  5. )
  6. echo,%getpath%
  7. pause>nul
复制代码
***共同提高***

TOP

回复 23# llqcnw


ECHO 处于关闭状态。
请按任意键继续. . .

你执行的哪个代码得到的这个结果?

TOP

你好,感谢这几天的耐心解答,不过现在问题没有解决,我做了测试,如果把快捷方式的起始位置的路径中的中文都改成英文,执行这段代码就能得到结果即快捷方式的目标位置的路径,请问有办法解决执行结果中的中文路径的问题吗?

你是说shortcut.exe无法支持中文路径是吗?

TOP

本帖最后由 llqcnw 于 2013-9-3 20:28 编辑

回复 22# DAIC


    但是执行代码后得到的结果是::

ECHO 处于关闭状态。

请按任意键继续. . .


没有得到路径啊?而有的快捷方式执行这段代码后得到的结果是:

C:\Program Files\Baofeng\StormPlayer\StormPlayer.exe

请按任意键继续. . .



(下午出门了,刚回来)
另外还有个问题,就是得到的结果是目标位置,而不是起始位置,即结果是包含有exe文件的一个链接,我想要的路径是到文件夹为止,不需要把文件名也列出来。

TOP

回复 21# llqcnw


    开起来是可以识别的,还有其它问题吗?

TOP

返回列表