Board logo

标题: [问题求助] VBS如何把当前目录中的EXE程序批量创建快捷方式到指定文件夹? [打印本页]

作者: nevergiveup520    时间: 2016-1-3 16:15     标题: VBS如何把当前目录中的EXE程序批量创建快捷方式到指定文件夹?

如何用批处理解决在该批处理文件夹内把所有的EXE程序(含该文件夹内的子文件夹里的程序)批量创建快捷方式到指定文件夹。请高手帮忙!!!如下图示:

[attach]9487[/attach]
这个事情困扰我很久了 ,前一段时间都在折腾电脑,装机……带着移动硬盘在不同电脑里来回使用,在新电脑上使用过程中,我在硬盘里新建的便捷版工具里的快捷方式都不能使用了,原因是因为新的电脑识别硬盘的盘符不一样,导致快捷方式的路径不同,从而导致无法使用,由于软件量较多在不同电脑上使用的情况时而发生,请想到bat批处理是否可以做到。

于是,我百度了一下,还真有这个便捷的方式,然而我网上是代码复制做成BAT,使用时出错了,以下是具体代码及出错的图示!
  1. '& @echo off& for %%1 in (*.exe)do start wscript /e:vbs "%~F0" "%%~F1" "%%~nx1" "%%~DP1" "%userprofile%\desktop\"
  2. set ws = createobject("wscript.shell")
  3. set wind = ws.createshortcut(wscript.arguments(3) & wscript.arguments(1) & ".lnk")
  4. wind.targetpath = wscript.arguments(0): wind.workingdirectory = wscript.arguments(2): wind.save
复制代码
以下是出错的截图:提示:电脑无法保存快捷方式 代码80070003   

[attach]9435[/attach]

[attach]9442[/attach]

  PS:按照网上教程试了不管用 1.打开“注册表编辑器”。(开始菜单运行中输入regedit 确定就可以打开)

2.找到“注册表编辑器”中:HKEY_CLASSES_ROOT\lnkfile 在右边栏空白处点击→新建→字符串值 命名为 IsShortcut

3.关闭“注册表编辑器”,重启电脑后就问题解决了


求大神帮忙看看啦 。谢谢!!!!
作者: DAIC    时间: 2016-1-3 16:24

原因是因为新的电脑识别硬盘的盘符不一样

直接修改盘符不行吗?
作者: 172788876    时间: 2016-1-3 16:52

回复 1# nevergiveup520


    用硬盘分区大师,将盘符改掉,一定要注意不要在pe等第三方系统更改,因为第三方系统更改盘符经常性失效,要在所使用的系统更改。。。
看看盘符是否被占用,占用就改回来。。。
等下我发百度云连接给你。。。
作者: nevergiveup520    时间: 2016-1-3 17:14

回复 2# DAIC


    这样做每次太麻烦了,如用批处理的话  ,一点就好了 !!
作者: nevergiveup520    时间: 2016-1-3 17:15

回复 3# 172788876


    谢谢你 ,但是我开始想用批处理解决这个问题!还有其他用途!!!
作者: 172788876    时间: 2016-1-3 17:22

回复 1# nevergiveup520


    http://pan.baidu.com/s/1dDV6csp
百度云连接
作者: nevergiveup520    时间: 2016-1-3 17:30

回复 6# 172788876


    谢谢   !!!!!!
作者: nevergiveup520    时间: 2016-1-3 18:00

回复 1# nevergiveup520

同样提示出错   ,崩溃啊 !
  1. @echo off
  2. echo set ws = createobject("wscript.shell")>lnk.vbs
  3. echo set lnk=ws.createshortcut(wscript.arguments(0))>>lnk.vbs
  4. echo lnk.targetpath=(wscript.arguments(1))>>lnk.vbs
  5. echo lnk.save>>lnk.vbs
  6. for /f "tokens=*" %%i in ('dir /a /b *.exe') do (
  7. lnk.vbs "D:\Users\Desktop\常用软件\%%~ni.lnk" "%%~fi"
  8. )
  9. del lnk.vbs
复制代码

作者: pcl_test    时间: 2016-1-3 18:17

你的路径是否正确?
作者: 172788876    时间: 2016-1-3 18:28

回复 8# nevergiveup520


    D:\Users\Desktop\常用软件\
你的D盘有这个路径吗???
其实批处理我也不懂,但是你这路径我大概明白
D盘\用户\桌面\常用软件\
我也认为是你路径错了。。。
作者: ygqiang    时间: 2016-1-3 18:52

回复 8# nevergiveup520
  1. set "back_d=c:\000"
  2. set "back_dir=c:\000\001.bat"
  3. del /q "c:\001.lnk"
  4. ;创建文件的快捷方式(普通位置)
  5. (echo Set objShell=CreateObject^("WScript.Shell"^)
  6. echo Set objlink=objShell.CreateShortcut^("c:\001.lnk"^)
  7. echo objlink.Hotkey="CTRL+Q"
  8. echo objlink.WindowStyle=3
  9. echo objlink.TargetPath="%back_dir%"
  10. echo objlink.WorkingDirectory="%back_d%"
  11. echo objlink.Save
  12. )>"mysendto.vbs"
  13. start /wait "" "mysendto.vbs"
  14. del "mysendto.vbs"
复制代码

作者: nevergiveup520    时间: 2016-1-3 18:56

回复 10# 172788876


    有这个 路径的  我自己把桌面的路径改了!!
作者: nevergiveup520    时间: 2016-1-3 18:57

回复 9# pcl_test


    路径正确的  ,我把默认路径改过了!
作者: ygqiang    时间: 2016-1-3 18:57

回复 8# nevergiveup520
  1. del /q "%userprofile%\「开始」菜单\注销.lnk"
  2. rem 创建exe文件的lnk快捷方式
  3. ::指定路径和名称
  4. set "LnkFile=%userprofile%\「开始」菜单\注销.lnk"
  5. ::指定主程序
  6. set "TargetPath=%SystemRoot%\system32\logoff.exe"
  7. ::指定起始位置
  8. set "WorkingDirectory=%SystemRoot%\system32"
  9. ::指定快捷键
  10. set "Hotkey=Ctrl+Shift+L"
  11. ::指定图标
  12. set "IconLocation=%windir%\system32\shell32.dll,44"
  13. del "%LnkFile%" /f /q >nul 2>nul
  14. call :CreateShort "%LnkFile%" "%TargetPath%" "%WorkingDirectory%" "%HotKey%" "%IconLocation%"
  15. ::Arguments              目标程序参数
  16. ::Description            快捷方式备注
  17. ::FullName               返回快捷方式完整路径
  18. ::Hotkey                 快捷方式快捷键
  19. ::IconLocation           快捷方式图标,不设则使用默认图标
  20. ::TargetPath             目标
  21. ::WindowStyle            窗口启动状态
  22. ::WorkingDirectory       起始位置
  23. :CreateShort
  24. mshta VBScript:Execute("Set a=CreateObject(""WScript.Shell""):Set b=a.CreateShortcut(""%~1""):b.TargetPath=""%~2"":b.WorkingDirectory=""%~3"":b.HotKey=""%~4"":b.IconLocation=""%~5"":b.Save:close")
复制代码

作者: nevergiveup520    时间: 2016-1-3 19:06

回复 9# pcl_test


    源代码的路劲是自动查找的"%userprofile%\desktop\" 出错后 ,我就直接把路径指定,但是还是出错 ,!
作者: pcl_test    时间: 2016-1-3 19:11

本帖最后由 pcl_test 于 2016-1-3 19:15 编辑

回复 15# nevergiveup520

保存为vbs运行,把结果贴出来
  1. Set objws = wscript.CreateObject("Wscript.Shell")
  2. msgbox "桌面:"& objws.SpecialFolders("Desktop")&vbCrLf&"VBS所在路径:"& objws.CurrentDirectory
复制代码

作者: nevergiveup520    时间: 2016-1-3 20:01

回复 18# pcl_test
作者: nevergiveup520    时间: 2016-1-3 20:09

回复 11# ygqiang
作者: pcl_test    时间: 2016-1-3 21:09

本帖最后由 pcl_test 于 2016-1-3 22:02 编辑

回复 18# nevergiveup520

居然没有权限,试试以管理员身份运行或者换到其他盘,再或者看看D:\Users\Desktop文件夹,右键,属性>安全,添加当前用户并赋予相应权限
作者: nevergiveup520    时间: 2016-1-3 23:33

回复 19# pcl_test

????你是说的是你给我的两行查询桌面路径的的那个?这个不需要管理员运行啊,右键没有这个以管理员权限运行这个选项啊!其他软件右键有的,以上的脚本我都试过以管理员权限运行过的,都没有成功!

下面是我换成其他盘设置的。
作者: pcl_test    时间: 2016-1-4 00:47

回复 20# nevergiveup520


    不是,说的是你生成快捷方式的批处理
作者: 9zhmke    时间: 2016-1-4 12:00

自己写个递归吧,直接在VBS调用这段就可以了:
  1. Function Shortcut(Short_name,path_and_name) '为在桌面创建一个快捷方式
  2.     strDesktop = WshShell.SpecialFolders("AllUsersDesktop") '在桌面创建一个快捷方式
  3.     set oShellLink = WshShell.CreateShortcut(strDesktop & "\" & Short_name & ".lnk")   '名称
  4.     oShellLink.TargetPath = path_and_name      '目标
  5.     oShellLink.WindowStyle = 1    '窗口样式  1默认窗口激活,参数3最大化激活,参数7最小化
  6.     oShellLink.Hotkey = ""         '快捷键
  7.     oShellLink.IconLocation = path_and_name & ",0"     '第几个图标
  8.     oShellLink.Description = Short_name      '备注
  9.     oShellLink.WorkingDirectory = left(path_and_name,InStrRev(path_and_name,"\")-1)   '起始位置
  10.     oShellLink.Arguments = ""    '参数
  11.     oShellLink.Save     '保存
  12. End Function
复制代码

作者: nevergiveup520    时间: 2016-1-4 12:47

回复 21# pcl_test


    若不用管理员权限运行的话 ,窗口一闪而过。我是用管理员权限运行的!
作者: pcl_test    时间: 2016-1-4 12:58

回复 23# nevergiveup520

保存为vbs运行
  1. Set objws = wscript.CreateObject("Wscript.Shell")
  2. '换到其他盘试试
  3. Set objLink = objws.CreateShortcut("E:\123.lnk")
  4. objLink.Save
复制代码

作者: nevergiveup520    时间: 2016-1-4 15:30

回复 24# pcl_test
    运行正常

但是我下面的一段批处理没有在运行的当前目录下创建,而是在C:\Windows\System32的程序创建快捷方式了,请问怎么回事?如图:
  1. @echo off
  2. echo set ws = createobject("wscript.shell")>lnk.vbs
  3. echo set lnk=ws.createshortcut(wscript.arguments(0))>>lnk.vbs
  4. echo lnk.targetpath=(wscript.arguments(1))>>lnk.vbs
  5. echo lnk.save>>lnk.vbs
  6. for /f "delims=*" %%i in ('dir /a /b/on *.exe') do (
  7. lnk.vbs "D:\Users\Desktop\1\%%~ni.lnk" "%%~fi"
  8. )
  9. del lnk.vbs
复制代码

作者: nevergiveup520    时间: 2016-1-4 15:35

回复 22# 9zhmke


   看不大明白,大神能否说的详细点!
作者: pcl_test    时间: 2016-1-4 16:12

本帖最后由 pcl_test 于 2016-1-4 16:57 编辑

保存为vbs运行,测试对桌面文件夹是否有相应权限
  1. Set objws = wscript.CreateObject("Wscript.Shell")
  2. desktop = objws.SpecialFolders("Desktop")
  3. Set objLink = objws.CreateShortcut(desktop&"\123测试.lnk")
  4. objLink.Save
  5. msgbox "桌面:"& desktop
复制代码

作者: pcl_test    时间: 2016-1-4 16:44

保存为bat运行,对照检测用
  1. ' 2>nul 3>nul&cls&@echo off
  2. '&for /f "delims=" %%i in ('dir /a-d /b *.exe') do cscript -nologo -e:vbscript "%~f0" "%%~ni" "%%~fi"
  3. '&pause&exit /b
  4. Set objws = wscript.CreateObject("Wscript.Shell")
  5. Desktop = objws.SpecialFolders("Desktop")
  6. '在H盘创建快捷方式
  7. Set objLink1 = objws.CreateShortcut("H:\" & WScript.Arguments(0) & ".lnk")
  8. objLink1.TargetPath = WScript.Arguments(1)
  9. objLink1.Save
  10. '在桌面创建快捷方式
  11. Set objLink2 = objws.CreateShortcut(Desktop & "\" & WScript.Arguments(0) & ".lnk")
  12. objLink2.TargetPath = WScript.Arguments(1)
  13. objLink2.Save
复制代码

作者: nevergiveup520    时间: 2016-1-4 18:53

保存为bat运行,对照检测用
pcl_test 发表于 2016-1-4 16:44


版主啊  按照你给的代码,我试过了  你给的两个路径,可以正常生成快捷方式,但是没有在我需要的
作者: pcl_test    时间: 2016-1-4 19:08

本帖最后由 pcl_test 于 2016-1-4 21:52 编辑

回复 29# nevergiveup520
  1. ' 2>nul 3>nul&cls&@echo off
  2. '&echo;批处理所在路径:%~pd0
  3. '&for /f "delims=" %%i in ('dir /a-d /b *.exe') do cscript -nologo -e:vbscript "%~f0" "%%~ni" "%%~fi"
  4. '&pause&exit /b
  5. Set objws = wscript.CreateObject("Wscript.Shell")
  6. Desktop = objws.SpecialFolders("Desktop")
  7. '在桌面创建快捷方式
  8. lnk = Desktop & "\" & WScript.Arguments(0) & ".lnk"
  9. Set objLink = objws.CreateShortcut(lnk)
  10. objLink.TargetPath = WScript.Arguments(1)
  11. WSH.echo lnk & vbCrLf &"程序所在路径:" &WScript.Arguments(1)
  12. objLink.Save
复制代码

作者: nevergiveup520    时间: 2016-1-4 22:21

回复  nevergiveup520
pcl_test 发表于 2016-1-4 19:08


版主是我太笨 , 你那代码我试过了,它还是从C:\Windows\System32的EXE程序创建快捷方式到H:\lvse_ruanjian文件夹内,我要的是在H:\lvse_ruanjian内的EXE程序创建到指定文件夹。 烦请你能否帮我再修改下,批处理这个我刚刚学!
作者: pcl_test    时间: 2016-1-4 22:23

本帖最后由 pcl_test 于 2016-1-4 22:24 编辑

回复 31# nevergiveup520
30楼代码运行结果发出来,别发些没用的截图
作者: nevergiveup520    时间: 2016-1-4 22:53

回复 32# pcl_test

30楼运行的结果:好多这样的,我只截取了部分!
作者: pcl_test    时间: 2016-1-4 23:15

本帖最后由 pcl_test 于 2016-1-4 23:56 编辑

回复 33# nevergiveup520

保存为vbs运行,出现提示框,点确定即可
  1. Set fso = CreateObject("scripting.filesystemobject")
  2. Set objws = wscript.CreateObject("Wscript.Shell")
  3. desktop = objws.SpecialFolders("Desktop")
  4. t = "桌面:"& desktop& vbCrLf &"VBS所在路径:"& objws.CurrentDirectory & vbCrLf
  5. Set Folder = fso.GetFolder(objws.CurrentDirectory)
  6. Set Files = Folder.Files
  7. For Each f In Files
  8.     Ext = LCase(fso.GetExtensionName(f))
  9.     IF Ext = "exe" Then
  10.         lnk = Desktop & "\" & Left(f.Name, InStrRev(f.Name, ".")-1) & ".lnk"
  11.         Set objLink = objws.CreateShortcut(lnk)
  12.         objLink.TargetPath = f
  13.         objLink.Save
  14.         msgbox t & lnk & vbCrLf &"程序所在路径:" &f
  15.     End If
  16. Next
复制代码

作者: 9zhmke    时间: 2016-1-5 08:56

本帖最后由 9zhmke 于 2016-1-5 08:58 编辑

我多年前做的批处理版的,只能针对存放绿色软件的文件夹使用,否则自己修改下吧:
  1. @echo off&color 1f
  2. echo.
  3. echo  ╭─────────────────────────────────────╮
  4. echo  │                                                                          │
  5. echo  │ 批量跑快捷.cmd 9z更新于2009.12.1             http://693985.qzone.qq.com  │
  6. echo  │                                                                          │
  7. echo  │ 目的: 自动查找出文件夹下所有子文件夹里的快捷方式并建立到到桌面,是绿色软  │
  8. echo  │ 件爱好者和电脑公司必备工具, 经常整理软件的个人用户使用起来更是方便。     │
  9. echo  │                                                                          │
  10. echo  │ 使用方法: 把所需要处理的文件夹拖到这个程序上面,或者把程序放到文件夹中执  │
  11. echo  │          行,在桌面或c:\运行时会从G盘到D盘选择最近的一个\tools文件夹处理  │
  12. echo  │ 要求: 1. 用户事先把需建快捷方式的软件在相应目录中都建立一次快捷方式,如   │
  13. echo  │          果今后这个目录被更改了位置,批处理将自动更正生成新的快捷方式。   │
  14. echo  │       2. 用户对要注册绿化类的软件建立名字要包含有“注册、绿化、安装、汉  │
  15. echo  │          化、设置、破解”字样的批处理、执行文件或注册表文件。            │
  16. echo  │       3. 对不需要建立快捷方式而又要运行的注册表、程序、批处理请更名包含  │
  17. echo  │         为“关联”字样。                                                 │
  18. echo  │                                                                          │
  19. echo  ╰─────────────────────────────────────╯
  20. setlocal enabledelayedexpansion
  21. set debug=0
  22. echo Set WS = WScript.CreateObject("WScript.Shell")>d:\temp.vbs
  23. echo strFullPath ="HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders">>d:\temp.vbs
  24. echo strNames = "AppData,Personal,Favorites,Desktop">>d:\temp.vbs
  25. echo aName = Split(strNames, ",")>>d:\temp.vbs
  26. echo For i = 1 To UBound(aName)>>d:\temp.vbs
  27. echo Wscript.Echo WS.RegRead(strFullPath ^& "\" ^& aName(i))>>d:\temp.vbs
  28. echo Next>>d:\temp.vbs
  29. set n=0
  30. for /f "delims=" %%i in ('cscript.exe //nologo d:\temp.vbs') do set /a n=n+1&set tmp!n!=%%i
  31. echo  我的文档=%tmp1%,桌面=%tmp3%
  32. set desk=%tmp3%
  33. del d:\temp.vbs >nul 2>nul
  34. rem 前面几句找桌面,后面这段找工作文件夹
  35. set doc=%1
  36. if not "%1"=="" set doc=%doc:"=%
  37. if "%doc%" gtr "" set filetmp="%1" & cd /d %1&&set i=1
  38. if /i "%cd%" neq "c:\" if  /i "%cd%" neq "%desk%" for /f %%j in ('dir /a:d /b') do set /a i+=1&if "!i!" gtr "2" goto NEXT
  39. for %%i in (d e f g h i j k l m n o p q r s t u c) do for /f "tokens=3" %%j in ('fsutil fsinfo drivetype %%i:') do (
  40. if "%%j"=="固定驱动器" if exist %%i:\tools\nul set lastdrv=%%i:
  41. )
  42. cd /d %lastdrv%\tools >nul 2>nul && goto NEXT
  43. :NEXT
  44. set filetmp=%cd%
  45. for /d %%i in (*.*) do  if exist %%i\nul goto BEGIN
  46. echo 使用时请把本文件放到相应文件夹里运行或拖动绿色软件的总文件夹到本程序上。
  47. echo 既没给出指定文件夹,也没找到名为tools的文件夹,程序退出。
  48. goto END
  49. :BEGIN
  50. del d:\temp.tmp /f /q >nul 2>nul
  51. echo  将对%cd%进行处理,否则请关闭本窗口....
  52. echo.
  53. set bakcuppath=%cd%
  54. cd /d %filetmp%
  55. echo 请耐心等待,硬盘灯亮完开始闪烁时就快了,程序将把%cd%下子目录里的快捷方式修
  56. echo 正并全放到桌面,同时查找同级文件夹是否有安装脚本,如果有的话会自动安装...
  57. echo ===============================================================================
  58. echo.
  59. for /f "tokens=1* delims=" %%i in ('dir *.lnk /s /b') do (
  60.     set str="%%i"& call :chklnk "%%i"
  61.     if not "!j!"=="not" (
  62.         set j=!fileurl:快捷方式=!
  63.         set j=!j:.exe=!
  64.         if "!fileurl!" neq "!j!" if exist "%desk%\!j!" del "%desk%\!j!"
  65.         if %debug%==1 echo 如果"!fileurl!" 不等于 "!j!" 那么如果存在 "%desk%\!j!" 删除 "%desk%\!j!"
  66.         ren "%desk%\!fileurl!" "!j!"
  67.         if %debug%==1 echo 改名"%desk%\!fileurl!"为"!j!"
  68.         set fileurl=
  69.         for %%k in (reg,install,setup,启用,破解,汉化,配置,设置,注册,初始,绿化,安装) do (
  70.             for /f %%l in ('dir *%%k*.inf *%%k*.reg *%%k*.exe *%%k*.cmd *%%k*.bat /b 2^>nul') do (
  71.               set str=%%l
  72.               set str=!str:un=!
  73.               set str=!str:卸=!
  74.               set str=!str:删=!
  75.               set str=!str:反=!
  76.               if "!str!" == "%%l" set fileurl=%%l)
  77.               )
  78.             )
  79.         if not "!fileurl!"=="" (if not  !fileurl:~-3!==lnk! call :green)
  80.     )
  81. )
  82. :关联
  83. echo.
  84. echo 快捷方式建立完毕,开始关联文件,有关联字样的程序将不把快捷方式发送到桌面...
  85. echo ===============================================================================
  86. cd /d %bakcuppath%
  87. for /f "delims=" %%i in ('dir *关联*.exe *关联*.bat *关联*.reg *关联*.cmd *关连*.exe *关连*.bat *关连*.reg *关连*.cmd /s /b') do (
  88.    set filetmp=%%~nxi&&set j=
  89.    if %debug%==1 echo 上面一句取得tools下每一文件快捷方式文件路径+文件名,路径=%%~dpi,文件名=%%~nxi
  90.    cd "%%~dpi"
  91.    if "!filetmp:原=!" gtr "!filetmp!" (set filetmp=) else (if "!filetmp:卸=!" gtr "!filetmp!" set filetmp=)
  92.    if "!filetmp!" gtr "" echo ..!cd!\"!filetmp!"&&if /i "!filetmp:~-3!"=="reg" (call regedit /s !filetmp!
  93.    ) else (if /i "!filetmp:~-3!"=="exe" (start /b "" "!cd!\!filetmp!") else (
  94.    ren "^!!filetmp!" "!filetmp!" > nul 1>nul 2>nul &&更名去掉“!”
  95.    echo @echo off >d:\temp.tmp
  96.    type !filetmp!|find /i /v "pause" >>d:\temp.tmp && rem 去掉文件中的pause、exit(以后改为exit /b)不退出cmd.exe
  97.    type d:\temp.tmp|find /i /v "exit" >tmp.bat
  98.    set filetmp="!cd!"
  99.    call tmp.bat
  100.    cd /d !filetmp!&&del tmp.bat&&color 1f&&echo off
  101.    )  
  102. )
  103.    )
  104. echo.
  105. echo ================================批量跑快捷已完成工作===========================
  106. echo ===============================================================================
  107. echo.
  108. :MENU
  109. echo    将把桌面上的快捷方式整理到开始菜单中...
  110. echo.
  111. echo.
  112. rem 取开始菜单位置
  113. if     exist %windir%\repair\*.bat set startmenu=D:\我的文档\系统设置\开始菜单
  114. if not exist %windir%\repair\*.bat set startmenu=%allusersprofile%\「开始」菜单
  115. echo.%startmenu%..专业程序..休闲娱乐..常用工具
  116. echo.
  117. md "%startmenu%\专业程序" 2>nul
  118. md "%startmenu%\休闲娱乐" 2>nul
  119. md "%startmenu%\常用工具" 2>nul
  120. echo.|set /p=直接显示到开始菜单上部的,<nul
  121. del "%startmenu%\qq*.lnk" /q /f >nul 2>nul
  122. del "%startmenu%\迅雷*.lnk" /q /f >nul 2>nul
  123. del "%startmenu%\Thunder*.lnk" /q /f >nul 2>nul
  124. for %%i in (qq,迅雷,Thunder,连接,车) do move "%desk%\*%%i*.lnk"  "%startmenu%">nul 2>nul
  125. for %%i in (qq,迅雷,Thunder,连接,车) do move "%userprofile%\桌面\*%%i*.lnk"  "%startmenu%">nul 2>nul
  126. for %%i in (qq,迅雷,Thunder,连接,车) do move "%allusersprofile%\桌面\*%%i*.lnk"  "%startmenu%">nul 2>nul
  127. echo.|set /p=休闲娱乐类、<nul
  128. for %%i in (音,听,声,影,视,play,棋,游戏,牌,麻将,vod,播,战,acdsee,斗地主,图,spider) do move "%desk%\*%%i*.lnk"  "%startmenu%\休闲娱乐">nul 2>nul
  129. for %%i in (音,听,声,影,视,play,棋,游戏,牌,麻将,vod,播,战,acdsee,斗地主,图,spider) do move "%userprofile%\桌面\*%%i*.lnk"  "%startmenu%\休闲娱乐">nul 2>nul
  130. for %%i in (音,听,声,影,视,play,棋,游戏,牌,麻将,vod,播,战,acdsee,斗地主,图,spider) do move "%allusersprofile%\桌面\*%%i*.lnk"  "%startmenu%\休闲娱乐">nul 2>nul
  131. echo.|set /p=工具类、<nul
  132. for %%i in (下载,cad,flash,fox,nero,7z,vpc,iso,排版,辞典,译,3d,ocr,conver,pdf,精灵,光驱,旺旺,photoshop,read,dict,UniversalView,wps) do move "%desk%\*%%i*.lnk"  "%startmenu%\常用工具">nul 2>nul
  133. for %%i in (下载,cad,flash,fox,nero,7z,vpc,iso,排版,辞典,译,3d,ocr,conver,pdf,精灵,光驱,旺旺,photoshop,read,dict,UniversalView,wps) do move "%userprofile%\桌面\*%%i*.lnk"  "%startmenu%\常用工具">nul 2>nul
  134. for %%i in (下载,cad,flash,fox,nero,7z,vpc,iso,排版,辞典,译,3d,ocr,conver,pdf,精灵,光驱,旺旺,photoshop,read,dict,UniversalView,wps) do move "%allusersprofile%\桌面\*%%i*.lnk"  "%startmenu%\常用工具">nul 2>nul
  135. for %%i in (office,excel,sql,word,powerp,纳米,dutool,资料,阿里旺旺,trstec,raysource,手机,摄,助手,fetion) do move "%desk%\*%%i*.lnk"  "%startmenu%\常用工具">nul 2>nul
  136. for %%i in (office,excel,sql,word,powerp,纳米,dutool,资料,阿里旺旺,trstec,raysource,手机,摄,助手,fetion) do move "%userprofile%\桌面\*%%i*.lnk"  "%startmenu%\常用工具">nul 2>nul
  137. for %%i in (office,excel,sql,word,powerp,纳米,dutool,资料,阿里旺旺,trstec,raysource,手机,摄,助手,fetion) do move "%allusersprofile%\桌面\*%%i*.lnk"  "%startmenu%\常用工具">nul 2>nul
  138. echo 专业程序类。
  139. for %%i in (优化,兔子,整理,拟,360,safe,kv,av,Ulead,毒霸,瑞星,江民,ghost,一键,强力卸载,内存,磁盘,硬盘,安全,量产,U盘,速度,驱动) do move "%desk%\*%%i*.lnk"  "%startmenu%\专业程序">nul 2>nul
  140. for %%i in (优化,兔子,整理,拟,360,safe,kv,av,Ulead,毒霸,瑞星,江民,ghost,一键,强力卸载,内存,磁盘,硬盘,安全,量产,U盘,速度,驱动) do move "%userprofile%\桌面\*%%i*.lnk"  "%startmenu%\专业程序">nul 2>nul
  141. for %%i in (优化,兔子,整理,拟,360,safe,kv,av,Ulead,毒霸,瑞星,江民,ghost,一键,强力卸载,内存,磁盘,硬盘,安全,量产,U盘,速度,驱动) do move "%allusersprofile%\桌面\*%%i*.lnk"  "%startmenu%\专业程序">nul 2>nul
  142. md "%startmenu%\专业程序\其他"
  143. for %%i in (进程,mon,icesword,Sys,july,防火墙,SERVICESPE,Tcp,reg,proc,监,注册表,exescope,pecompact,unpack,sysexp,stultima,hex,wpe,警,wingho,还原) do move "%desk%\*%%i*.lnk"  "%startmenu%\专业程序\其他">nul 2>nul
  144. for %%i in (进程,mon,icesword,Sys,july,防火墙,SERVICESPE,Tcp,reg,proc,监,注册表,exescope,pecompact,unpack,sysexp,stultima,hex,wpe,警,wingho,还原) do move "%desk%\*%%i*.lnk"  "%userprofile%\桌面\*%%i*.lnk"  "%startmenu%\专业程序\其他">nul 2>nul
  145. for %%i in (进程,mon,icesword,Sys,july,防火墙,SERVICESPE,Tcp,reg,proc,监,注册表,exescope,pecompact,unpack,sysexp,stultima,hex,wpe,警,wingho,还原) do move "%desk%\*%%i*.lnk"  "%allusersprofile%\桌面\*%%i*.lnk"  "%startmenu%\专业程序\其他">nul 2>nul
  146. :END
  147. echo.
  148. del d:\temp.* >nul 2>nul
  149. cd /d %bakcuppath%
  150. del tmp.bat /s /q >nul 2>nul
  151. echo.
  152. echo.
  153. echo  批量跑快捷已经完成,请检查开始菜单上部的内容。按任意键退出或直接关闭本窗口....
  154. pause>nul
  155. exit
  156. :chklnk
  157. if %debug%==1 echo 现在的目录是!cd!&pause
  158. del d:\temp.tmp >nul 2>nul
  159. set j="%~dp1"
  160. set filetmp="%~nx1"
  161. set j=!j:"=!
  162. set filetmp=!filetmp:"=!
  163. set fileurl=!filetmp!
  164. if %debug%==1 echo 传过来的数据是"%~1",取得路径=!j!,文件名=!filetmp!.&pause
  165. cd "!j!"
  166. if %debug%==1 echo 进入目录:"!j!",现在的目录是:%cd%
  167. if %debug%==1 echo --------------
  168. find /i /c "!j!" "!filetmp!">nul&&echo ..!filetmp!&&copy "!filetmp!" "%desk%">nul && goto :eof
  169. if %debug%==1 echo =============
  170. if %debug%==1 echo 从文件"!filetmp!"里查"!j!"成功则复制"!filetmp!"到"%desk%"完成后返回
  171. for /f "delims=" %%j in ('find ":" "!filetmp!" ^|findstr /r "^[A-z]:[\\]"') do set i=%%j& set j=%%~nxj
  172. if %debug%==1 echo 查找快捷方式路径“!i!”+文件名是“!j!”
  173. if "!i!"=="" echo 无效快捷路径!i!,丢弃.&set j=not& goto :eof
  174. if "!i:~-1!"=="\" (
  175. if %debug%==1 echo 遇到不同的lnk格式,致使全路径=“!i!”,文件名=“!j!”
  176. for /f "delims=" %%j in ('find "\" "!filetmp!" ^|findstr /r ".exe"') do set j=%%j
  177. set i=!i!!j!
  178. for /f %%j in ('echo !i!') do set j=%%~nxj
  179. if %debug%==1 echo 修正为全路径=“!i!”,文件名=“!j!”
  180. )
  181. if exist "!i!" echo .!filetmp!在其它目录里,但是正确的&&copy "!filetmp!" "%desk%">nul && goto :eof
  182. if not exist !j! for /f %%j in ('dir !j! /s /a /b') do set j=%%j&echo ..!j!在子目录里&set j=!j:%cd%\=!&echo 去掉前半截为!j!
  183. if not exist "!j!" echo 无效快捷方式!j!,丢弃.&set j=not& goto :eof
  184. if %debug%==1 echo 找到!filetmp!,文件是!j!,lnk文件不正确
  185. echo .LNK路径不对,在桌面另生成:!fileurl!===
  186. set oldpath="!cd!"
  187. (echo Set WshShell = WScript.CreateObject^("WScript.Shell"^)
  188. echo strDesktop = WshShell.SpecialFolders^("Desktop"^)
  189. echo set oShellLink = WshShell.CreateShortcut^(strDesktop ^& "\!fileurl!"^)
  190. echo oShellLink.TargetPath = "%cd%\!j!" '目标
  191. echo oShellLink.WindowStyle = 1 '参数1默认窗口激活,参数3最大化激活,参数7最小化
  192. echo oShellLink.Hotkey = ""
  193. echo oShellLink.IconLocation = "%cd%\!j!, 0"
  194. echo oShellLink.Description = ""
  195. echo oShellLink.WorkingDirectory = "%cd%\"
  196. echo oShellLink.Save
  197. )>"d:\temp.vbs"
  198. cscript.exe //nologo d:\temp.vbs >nul 2>nul
  199. if %debug%==1 echo !cd!生成了桌面的!fileurl!
  200. del d:\temp.vbs>nul 2>nul
  201. if not exist "%desk%\!fileurl!" (
  202. set fileurl=!fileurl:~0,-4!.url
  203. if %debug%==1 以下几句生成.url快捷文件
  204. echo [InternetShortcut]
  205. echo URL=File:///%cd%\!j!
  206. echo WorkingDirectory=%cd%
  207. echo ShowCommand=
  208. echo IconFile=%cd%\!j!
  209. echo IconIndex=^0
  210. echo HotKey=) >"%desk%\!fileurl!"
  211. if not exist "%desk%\!fileurl!" echo 不知道为什么没有生成桌面快捷方式&goto :eof
  212. goto :eof
  213. :green
  214. echo 查找到!fileurl!可能是安装入口
  215. for %%k in (un,卸,删,反安装) do if "!fileurl:%%k=!" gtr "!fileurl!" set fileurl=
  216. if %debug%==1 echo 如果!fileurl!里有un,卸,删,反安装,字样则把变量fileurl置空,现在是!fileurl!
  217. if -!fileurl!-==-- goto :eof
  218. echo -----找到并注册:!cd!\的"!fileurl!"
  219. set i=!fileurl:~-3!
  220. if /i "%i%"=="reg" call regedit /s "!fileurl!" & goto :eof
  221. if /i "%i%"=="exe" start /b "" "!cd!\!fileurl!" & goto :eof
  222. if /i "%i%"=="inf" call rundll32 SETUPAPI.DLL,InstallHinfSection DefaultInstall 128 .\!fileurl! & goto :eof
  223. ren "^!!fileurl!" "!fileurl!" > nul 1>nul 2>nul &&更名去掉“!”
  224. type !fileurl!|find /i /v "pause" >d:\temp.tmp && rem 去掉文件中的pause,更改exit为exit /b不退出cmd.exe
  225. echo @echo off >tmp.bat
  226. type d:\temp.tmp|find /i /v "exit" >>tmp.bat
  227. call cmd /c tmp.bat
  228. if %debug%==1  echo 结束时的目录是:“!cd!”老目录是:!oldpath!
  229. cd /d !oldpath!&&del tmp.bat>nul 2>nul&color 1f&echo off
  230. goto :eof
复制代码

作者: nevergiveup520    时间: 2016-1-5 17:34

回复  nevergiveup520

保存为vbs运行,出现提示框,点确定即可
pcl_test 发表于 2016-1-4 23:15


保存为VBS双击一闪而过,用系统提示的打开运行,得到的结果还是C盘下面的程序快捷方式,点击一下提示窗的确定就创建一个快捷方式,窗口提示的VBS实际存放的位置不是C盘目录。
   [attach]9471[/attach][attach]9472[/attach]


下面的这个是我在网上找到其他软件自带的创建快捷方式批处理,它这个可以创建但是只能创建一个,下面我附上代码及创建成功后的截图!
  1. @echo off
  2. mshta VBScript:Execute("Set a=CreateObject(""WScript.Shell""):Set b=a.CreateShortcut(a.SpecialFolders(""Desktop"") & ""\Duplicate Cleaner Pro.lnk""):b.TargetPath=""%~dp0Duplicate Cleaner\DuplicateCleaner.exe"":b.WorkingDirectory=""%~dp0"":b.Save:close")
复制代码
[attach]9482[/attach]
作者: nevergiveup520    时间: 2016-1-5 17:49

回复 35# 9zhmke


    谢谢 ,你这个我得有时间消化消化下,我刚刚学习这个!
作者: pcl_test    时间: 2016-1-5 18:13

回复 36# nevergiveup520

不清楚你电脑什么问题,代码都是没问题,你也可以换别的机试试。
只能再测试别的方法

保存为bat运行,看看这两段代码,那个显示的路径是正确的
  1. @echo off
  2. echo;批处理所在路径:%~pd0
  3. for /f "delims=" %%i in ('dir /a-d /b *.exe') do echo;%%~fi
  4. pause
复制代码
  1. @echo off
  2. echo;批处理所在路径:%~pd0
  3. for /f "delims=" %%i in ('dir /a-d /b "%~pd0*.exe"') do echo;%%~fi
  4. pause
复制代码

作者: nevergiveup520    时间: 2016-1-5 18:35

回复  nevergiveup520

不清楚你电脑什么问题,代码都是没问题,你也可以换别的机试试。
只能再测试别的 ...
pcl_test 发表于 2016-1-5 18:13



上面的两段代码没有问题,结果都是正确的。 你说的系统变量问题  我自己没有特意更改过啊,我的是win10,64位系统。
作者: pcl_test    时间: 2016-1-5 18:39

本帖最后由 pcl_test 于 2016-1-5 18:48 编辑

回复 39# nevergiveup520

没有问题?不是显示没有找到exe文件?
再来一段测试
  1. @echo off
  2. echo;批处理所在路径:%~pd0
  3. cd /d "%~pd0"
  4. for %%a in (*.exe) do echo;%%a^|%%~fa
  5. echo;当前环境:%cd%
  6. set path
  7. pause
复制代码

作者: nevergiveup520    时间: 2016-1-5 18:49

回复  nevergiveup520

没有问题?不是显示没有找到exe文件?
pcl_test 发表于 2016-1-5 18:39


上面的可能是我没有用管理员权限运行造成的

我重新用管理员权限又测试了下:下面的这段代码得到的是C盘的程序,你的另外的一段一个参数为"%~pd0*.exe"'的用管理员权限运行一闪而过,不用管理员权限就是刚才上面的只有bat的路径找不到程序。
  1. @echo off
  2. echo;批处理所在路径:%~pd0
  3. for /f "delims=" %%i in ('dir /a-d /b *.exe') do echo;%%~fi
  4. pause
复制代码

作者: nevergiveup520    时间: 2016-1-5 18:53

回复  nevergiveup520

没有问题?不是显示没有找到exe文件?
再来一段测试
pcl_test 发表于 2016-1-5 18:39


没有用管理员权限得到下面的这些结果

用管理员权限运行得到的是下面的这个:
作者: pcl_test    时间: 2016-1-5 18:57

本帖最后由 pcl_test 于 2016-1-5 18:59 编辑

回复 42# nevergiveup520
怎么又换成桌面了?桌面有exe文件?
作者: nevergiveup520    时间: 2016-1-5 19:00

回复 43# pcl_test


    你没有看到路径是我没有用管理员权限得到的,我后来用管理员权限才有显示路径的。已经修改该回答了
作者: pcl_test    时间: 2016-1-5 19:10

回复 44# nevergiveup520

你是在H:\lvse_ruanjian运行的吗?
作者: WHY    时间: 2016-1-5 20:43

这样试试
  1. Dim fso, objShell, strDesktop, strCurrentDir
  2. Set fso = CreateObject("Scripting.FileSystemObject")
  3. Set objShell = CreateObject("WScript.Shell")
  4. strDesktop = objShell.SpecialFolders("Desktop")
  5. strCurrentDir = Left(WScript.ScriptFullName, InStrRev(WScript.ScriptFullName, "\")-1)
  6. Dim objFile, strName, strLnkName, objLnk
  7. For Each objFile In fso.GetFolder(strCurrentDir).Files
  8.     IF LCase(Right(objFile.Path, 4)) = ".exe" Then
  9.         strName = fso.GetBaseName(objFile.Path)
  10.         strLnkName = strDesktop & "\" & strName & ".lnk"
  11.         Set objLnk = objShell.CreateShortcut(strLnkName)
  12.         objLnk.TargetPath = objFile.Path
  13.         objLnk.WorkingDirectory = strCurrentDir
  14.         objLnk.Save
  15.     End If
  16. Next
复制代码

作者: nevergiveup520    时间: 2016-1-5 20:50

回复 45# pcl_test


    不是  ,我是在桌面,那个路径是对的
作者: nevergiveup520    时间: 2016-1-5 20:55

回复 46# WHY


    你给的代码,运行不了啊  ,不管是否有管理员权限运行都是一闪而过啊
作者: WHY    时间: 2016-1-5 21:04

本帖最后由 WHY 于 2016-1-5 21:18 编辑

那这样呢?
保存为Test.bat,把Test.bat与你的exe文件放在同一文件夹下
  1. @if (0)==(0) echo off
  2. pushd "%~dp0"
  3. dir /b /a-d *.exe | cscript //nologo //e:jscript "%~f0" "%~dp0"
  4. pause & exit
  5. @end
  6. var strCurrentDir = WScript.Arguments(0);
  7. var objShell = new ActiveXObject('WScript.Shell');
  8. var strDesktop = objShell.SpecialFolders('Desktop');
  9. while(!WScript.StdIn.AtEndOfStream){
  10.     var strFile = WScript.StdIn.ReadLine();
  11.     var strName = strFile.replace(/(.+)\.exe$/i, '$1');
  12.     var strLnkName = strDesktop + '\\' + strName + '.LNK';
  13.     var objLnk = objShell.CreateShortcut(strLnkName);
  14.     objLnk.TargetPath = strCurrentDir + '\\' + strFile;
  15.     objLnk.WorkingDirectory = strCurrentDir;
  16.     objLnk.Save();
  17. }
复制代码

作者: pcl_test    时间: 2016-1-5 21:13

回复 47# nevergiveup520

你在H:\lvse_ruanjian运行40楼的代码能显示正确的exe路径?
作者: nevergiveup520    时间: 2016-1-5 21:34

回复 50# pcl_test

  40楼代码运行后的结果。没有用管理员权限运行就可以得到!
作者: nevergiveup520    时间: 2016-1-5 21:36

回复 43# pcl_test


   桌面文件夹里确实有exe程序,但是运行那代码  不是我想要的结果
作者: nevergiveup520    时间: 2016-1-5 21:47

那这样呢?
保存为Test.bat,把Test.bat与你的exe文件放在同一文件夹下
WHY 发表于 2016-1-5 21:04



    你给这个代码运行正常,可是我的软件并不是在同一个目录下的,有些便捷绿化软件还有很多子目录,我就把好多绿色软件的文件夹放在一个文件里,而我需要把这些文件夹里的exe程序创建快捷方式到我指定的文件夹里如下图:还得劳请你帮我再修改下!谢谢啦!
作者: WHY    时间: 2016-1-5 22:54

把当前目录(包括子目录)中的所有exe文件创建LNK快捷方式到 "E:\快捷方式" 目录中
快捷方式文件有重名时,后创建的文件覆盖之前创建的文件。
  1. @if (0)==(0) echo off
  2. set "strLnkDir=E:\快捷方式"
  3. md "%strLnkDir%" 2>nul
  4. pushd "%~dp0"
  5. dir /b /s /a-d *.exe | cscript //nologo //e:jscript "%~f0" "%strLnkDir%"
  6. pause & exit
  7. @end
  8. var strLnkDir = WScript.Arguments(0);
  9. var objShell = new ActiveXObject('WScript.Shell');
  10. while(!WScript.StdIn.AtEndOfStream){
  11.     var strFile = WScript.StdIn.ReadLine();
  12.     var strName = strFile.replace(/.+\\(.+)$/i, '$1');
  13.     var strLnkName = strLnkDir + '\\' + strName + '.LNK';
  14.     try {
  15.         var objLnk = objShell.CreateShortCut(strLnkName);
  16.         objLnk.TargetPath = strFile;
  17.         objLnk.WorkingDirectory = strFile.replace(/(.+)\\.+$/, '$1');
  18.         objLnk.Save();
  19.         objLnk = null;
  20.     } catch(e) {
  21.         WScript.Echo(e.message);
  22.     }
  23. }
复制代码

作者: nevergiveup520    时间: 2016-1-5 23:39

回复 54# WHY

再次感谢各位大神的帮助,特别是WHY大神及版主pcl_test 这两天的耐心帮助解答,再次感谢两位,谢谢!!!!
   
若是这段代码里面再加入可以自动判断只创建可以独立运行的程序的图标就更完美了,欢迎各路大神前来PK!!

PS: 这代码其实已经够我使用了,再次感谢他们!谢谢!!@WHY ,@pcl_test




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2