无忧启动论坛

标题: 创建当前文件夹的exe的快捷方式去桌面 [打印本页]

作者: j2rong    时间: 7 小时前
标题: 创建当前文件夹的exe的快捷方式去桌面
有没有什么好用的批处理方式
作者: cls822001    时间: 6 小时前
本帖最后由 cls822001 于 2025-11-22 10:10 编辑

NSIS 脚本
  1. !include "FileFunc.nsh"


  2. OutFile 遍历当前目录生成快捷方式.exe
  3. Icon F:\Tools\启动脚本\set.ico
  4. SilentInstall silent

  5. Section "创建桌面快捷方式"
  6.                 SetOutPath "$EXEDIR"
  7.                
  8.     StrCpy $0 "$EXEDIR"  

  9.     StrCpy $3 "$EXEFILE"

  10.     ; 开始查找EXE文件
  11.     FindFirst $1 $2 "$0\*.exe"

  12.     loop:
  13.         StrCmp $2 "" done  ; 如果找不到文件则跳转到done

  14.         ; 排除安装程序自身
  15.         StrCmp $2 "$3" skip  ; 如果文件名匹配则跳过
  16.         StrCmp $2 "Setup.exe" skip
  17.         StrCmp $2 "Installer.exe" skip
  18.         StrCmp $2 "安装程序.exe" skip
  19.         StrCpy $4 $2 -4 ;快捷方式去掉exe后缀
  20.         ; 创建桌面快捷方式
  21.         CreateShortCut "$DESKTOP\$4.lnk" "$0\$2" "" "$0\$2" 0
  22.         DetailPrint "已创建桌面快捷方式: $2"

  23.         skip:
  24.         FindNext $1 $2
  25.         Goto loop

  26.     done:
  27.         FindClose $1
  28. SectionEnd
复制代码



作者: wn168cn@163.com    时间: 6 小时前
支持2#原创
作者: cls822001    时间: 6 小时前
本帖最后由 cls822001 于 2025-11-22 10:20 编辑

第二版 nsis
  1. !include "FileFunc.nsh"


  2. OutFile 一键桌面快捷方式.exe
  3. Icon F:\Tools\启动脚本\set.ico
  4. SilentInstall silent

  5. Section "创建桌面快捷方式"
  6.                 SetOutPath "$EXEDIR"
  7.     ; 获取当前目录和目录名
  8.     StrCpy $0 "$EXEDIR"

  9.     ; 获取目录名称
  10.     ${GetParent} "$0" $R0    ; 获取父目录路径
  11.     ${GetFileName} "$0" $R1  ; 获取当前目录名

  12.     ; 如果GetFileName获取失败,使用其他方法
  13.     StrCmp $R1 "" 0 +3
  14.     StrCpy $R1 "我的程序"  ; 默认名称
  15.     Goto create_shortcuts

  16.     ; 开始查找EXE文件
  17.     FindFirst $1 $2 "$0\*.exe"

  18.     create_shortcuts:
  19.     StrCmp $2 "" done

  20.     loop:
  21.         StrCmp $2 "" done

  22.         ; 排除安装程序自身
  23.         StrCmp $2 "$EXEFILE" skip

  24.         ; 使用目录名作为快捷方式名称
  25.         CreateShortCut "$DESKTOP\$R1.lnk" "$0\$2" "" "$0\$2" 0
  26.         DetailPrint "已创建桌面快捷方式: $R1"
  27.         Goto done  ; 只创建一个快捷方式

  28.         skip:
  29.         FindNext $1 $2
  30.         Goto loop

  31.     done:
  32.         FindClose $1
  33. SectionEnd
复制代码



作者: yyz2191958    时间: 6 小时前
cls822001 发表于 2025-11-22 09:58
NSIS 脚本

助人为乐
作者: smile_z    时间: 5 小时前
感谢分享
作者: 不点    时间: 5 小时前
以上方法貌似要用到(微软之外的)外部软件。

如果使用微软自带的方法,大致有两种,一种是 powershell 方法,另一种是 VBS 方法。前者不需要创建 .vbs 就能实现。后者需要创建 .vbs,然后运行 .vbs 即可。前者的缺点是,依赖 powershell,而 WinXP 没有 powershell,而且即使是 Win11,在 Win11 的 WinPE 下,也可能阉割掉了 powershell。所以,powershell 方法尽管很简捷,但却存在失败场景。

而 VBS 脚本的方法,虽然稍走弯路,但普适性强,基本不会失败。

请自行搜索相关方法和代码。建议用微软的 bing 来搜。

作者: 燕飞龙    时间: 5 小时前
感谢分享
作者: j2rong    时间: 5 小时前
cls822001 发表于 2025-11-22 10:17
第二版 nsis

用不了,是bat吗?比方说我是  100.exe
作者: cls822001    时间: 5 小时前
j2rong 发表于 2025-11-22 11:26
用不了,是bat吗?比方说我是  100.exe

nsis 安装脚本 可以编译成exe运行
作者: luntaner    时间: 5 小时前
学习了    之前都是手动创建的
作者: j2rong    时间: 4 小时前
cls822001 发表于 2025-11-22 11:29
nsis 安装脚本 可以编译成exe运行

如果我想指定某个exe名字   要怎么改
作者: cls822001    时间: 4 小时前
j2rong 发表于 2025-11-22 11:39
如果我想指定某个exe名字   要怎么改

排除那些就好了 第二版代码用文件夹名做快捷方式 就是遍历 所有EXE 要单个更简单
         SetShellVarContext all
         CreateShortCut "$DESKTOP\显示器工具.lnk" "$EXEDIR\显示器工具.exe"
作者: 倒垃圾的歌者    时间: 4 小时前
本帖最后由 倒垃圾的歌者 于 2025-11-22 16:09 编辑

两种方法

批处理调用VBScript(创建文件夹快捷方式

  1. mshta VBScript:Execute("Set a=CreateObject(""WScript.Shell""):Set b=a.CreateShortcut(""%UserProfile%\Desktop\快捷方式名字.lnk""):b.TargetPath=""文件夹路径"":b.WorkingDirectory=""文件夹路径"":b.Save:close")
复制代码

批处理调用PowerShell(创建文件夹快捷方式
  1. powershell -command "$ws = New-Object -ComObject WScript.Shell; $s = $ws.CreateShortcut('%UserProfile%\Desktop\快捷方式名字.lnk'); $s.TargetPath = '文件夹路径'; $s.WorkingDirectory = '文件夹路径'; $s.Save()"
复制代码

注意:TargetPath对应快捷方式中的目标WorkingDirectory对应起始位置如果不是创建文件夹快捷方式该改为文件路径\XXX.exe



批处理调用VBScript(创建exe文件快捷方式
  1. mshta VBScript:Execute("Set a=CreateObject(""WScript.Shell""):Set b=a.CreateShortcut(""%UserProfile%\Desktop\快捷方式名字.lnk""):b.TargetPath=""文件夹路径\XXX.exe"":b.WorkingDirectory=""文件夹路径"":b.Save:close")
复制代码

批处理调用PowerShell(创建exe文件快捷方式

  1. powershell -command "$ws = New-Object -ComObject WScript.Shell; $s = $ws.CreateShortcut('%UserProfile%\Desktop\快捷方式名字.lnk'); $s.TargetPath = '文件夹路径\XXX.exe'; $s.WorkingDirectory = '文件夹路径'; $s.Save()"
复制代码



由于桌面文件夹路径可以更改,所以%UserProfile%\Desktop可能不是正确路径

所以可以改为

批处理调用VBScript(创建文件夹快捷方式

  1. for /f "skip=2 tokens=2*" %%a in ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v Desktop') do set "My-Desktop=%%b"

  2. echo 当前用户桌面的路径为%My-Desktop%

  3. mshta VBScript:Execute("Set a=CreateObject(""WScript.Shell""):Set b=a.CreateShortcut(""%My-Desktop%\快捷方式名字.lnk""):b.TargetPath=""文件夹路径"":b.WorkingDirectory=""文件夹路径"":b.Save:close")
复制代码

批处理调用VBScript(创建exe文件快捷方式

  1. for /f "skip=2 tokens=2*" %%a in ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v Desktop') do set "My-Desktop=%%b"

  2. echo 当前用户桌面的路径为%My-Desktop%

  3. mshta VBScript:Execute("Set a=CreateObject(""WScript.Shell""):Set b=a.CreateShortcut(""%My-Desktop%\快捷方式名字.lnk""):b.TargetPath=""文件夹路径\XXX.exe"":b.WorkingDirectory=""文件夹路径"":b.Save:close")
复制代码

批处理调用PowerShell(创建文件夹快捷方式

  1. for /f "skip=2 tokens=2*" %%a in ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v Desktop') do set "My-Desktop=%%b"

  2. echo 当前用户桌面的路径为%My-Desktop%

  3. powershell -command "$ws = New-Object -ComObject WScript.Shell; $s = $ws.CreateShortcut('%My-Desktop%\快捷方式名字.lnk'); $s.TargetPath = '文件夹路径'; $s.WorkingDirectory = '文件夹路径'; $s.Save()"
复制代码

批处理调用PowerShell(创建exe文件快捷方式

  1. for /f "skip=2 tokens=2*" %%a in ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v Desktop') do set "My-Desktop=%%b"

  2. echo 当前用户桌面的路径为%My-Desktop%

  3. powershell -command "$ws = New-Object -ComObject WScript.Shell; $s = $ws.CreateShortcut('%My-Desktop%\快捷方式名字.lnk'); $s.TargetPath = '文件夹路径\XXX.exe'; $s.WorkingDirectory = '文件夹路径'; $s.Save()"
复制代码


作者: guong    时间: 3 小时前
倒垃圾的歌者 发表于 2025-11-22 12:31
两种方法

批处理调用VBScript(创建文件夹快捷方式)

谢谢分享!
作者: PCHH    时间: 1 小时前
感谢分享
作者: wwwlhp    时间: 1 小时前
多谢分享!!!
作者: denisz    时间: 1 小时前
学习了,等用的时候来




欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) Powered by Discuz! X3.3