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

[问题求助] 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.关闭“注册表编辑器”,重启电脑后就问题解决了


求大神帮忙看看啦 。谢谢!!!!
1

评分人数

学以致用!不耻下问!

回复 54# WHY

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

PS: 这代码其实已经够我使用了,再次感谢他们!谢谢!!@WHY ,@pcl_test
学以致用!不耻下问!

TOP

把当前目录(包括子目录)中的所有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. }
复制代码

TOP

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



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

TOP

回复 43# pcl_test


   桌面文件夹里确实有exe程序,但是运行那代码  不是我想要的结果
学以致用!不耻下问!

TOP

回复 50# pcl_test

  40楼代码运行后的结果。没有用管理员权限运行就可以得到!
学以致用!不耻下问!

TOP

回复 47# nevergiveup520

你在H:\lvse_ruanjian运行40楼的代码能显示正确的exe路径?

TOP

本帖最后由 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. }
复制代码

TOP

回复 46# WHY


    你给的代码,运行不了啊  ,不管是否有管理员权限运行都是一闪而过啊
学以致用!不耻下问!

TOP

回复 45# pcl_test


    不是  ,我是在桌面,那个路径是对的
学以致用!不耻下问!

TOP

这样试试
  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
复制代码

TOP

回复 44# nevergiveup520

你是在H:\lvse_ruanjian运行的吗?

TOP

回复 43# pcl_test


    你没有看到路径是我没有用管理员权限得到的,我后来用管理员权限才有显示路径的。已经修改该回答了
学以致用!不耻下问!

TOP

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

回复 42# nevergiveup520
怎么又换成桌面了?桌面有exe文件?

TOP

回复  nevergiveup520

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


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

用管理员权限运行得到的是下面的这个:
学以致用!不耻下问!

TOP

返回列表