中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [圆满解决]shortcuts批量创建修改快捷键的难题
作者:
标题: [圆满解决]shortcuts批量创建修改快捷键的难题 上一主题 | 下一主题
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『楼 主』:  [圆满解决]shortcuts批量创建修改快捷键的难题

结合批处理,shortcuts可以实现批量创建和修改快捷键,但是在实际中遇到一个问题。那就是如果shortcuts创建或修改快捷键的/P参数或者/W参数或者/I参数中存在带空格的路径,那么创建快捷方式就会失败,而快捷键参数的路径中如果本身存在空格,那么本身就要求使用引号来包括路径,因而产生了冲突。如何解决这个问题呢?如目标为"D:\UGS\NX 6.0\MACH\auxiliary\cls2clf.bat" 参数为"D:\UGS\NX 6.0\"  工作路径为"D:\UGS\NX 6.0\MACH\auxiliary\",图标为“D:\UGS\NX 6.0\UGTO2D\ugto2d.ico,0”的快捷方式使用shortcuts创建时就会失败。
下面是批处理文件和我的打包的快捷方式,大家测试下如何解决这个问题下面的程序中BS是字符替换工具,替换任意指定的字符。
@ECHO OFF
REM 当改变了文件路径后批量替换(修复)快捷方式.变量LNKPATH为需要替换的快捷方式文件夹的路径;OLDPATH为原始文件安装路径;NEWPATH为新的移动路径
REM 假设安装了CATIA后移动了文件路径或者要制作绿色CATIA,那么快捷方式路径应该做相应变化

SET LNKPATH="%ALLUSERSPROFILE%\「开始」菜单\程序\【HYSOFT】\UGSNX6绿色精简版"
SET OLDPATH="D:\UGS
SET NEWPATH="D:\PROGRAMS PROFILES\UGS"

SET PATH=%CD%;%CD%\GTOOLS\;%PROGRAMFILES%\WINRAR;%PATH%
IF NOT EXIST ".\GTOOLS\BS.exe" SET ERR=安装支持目录下缺少字符替换工具,安装程序无法继续&&GOTO:ERROR
IF NOT EXIST ".\GTOOLS\SC.exe" SET ERR=安装支持目录缺少快捷方式创建工具,安装程序无法继续&&GOTO:ERROR
FOR /F "DELIMS=" %%I IN ('DIR /B/S "%LNKPATH%\*.LNK"') DO (
     SC /F:"%%I" /A:Q>"%TEMP%\SCUT.TXT"
     BS "%TEMP%\SCUT.TXT" %OLDPATH% %NEWPATH% /I>NUL&CLS
     setlocal enabledelayedexpansion
     FOR /F "TOKENS=1,* DELIMS==" %%A IN (%TEMP%\SCUT.TXT) DO CALL SET %%A=%%B
     IF EXIST "!TargetPath!" SC.EXE /F:"%%I" /A:E /T:"!TargetPath!" /P:"!Arguments!" /W:"!WorkingDirectory!" /I:"!IconLocation!" /D:"鸿越软件"
     endlocal
)
SET ERR=替换修复完成,谢谢您使用鸿越软件制作的该工具&&GOTO:ERROR
:ERROR
>"%TEMP%\Temp.vbs"   Echo intAnswer = MsgBox("%ERR%" , vbYes, "鸿越软件温馨提示您!")
cscript //nologo "%TEMP%\Temp.vbs"
EXIT
[ Last edited by HUNRYBECKY on 2008-8-4 at 08:23 AM ]

附件 1: SCUT.rar (2008-7-31 14:46, 108.6 K,下载次数: 137)
2008-7-31 14:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『第 2 楼』:  

没有人回答,自己顶一个。

2008-7-31 15:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『第 3 楼』:  

呵呵,高手们今天怎么都潜水了。继续等待。

2008-7-31 16:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 4 楼』:  

usebackq

2008-7-31 16:25
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『第 5 楼』:  

高手们真会潜水,到现在还没有人光顾。

2008-8-1 14:13
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『第 6 楼』:  

我自己再顶下,不知道是这个问题太简单还是因为其他原因,居然都没有人回答。。。。

2008-8-2 12:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dato
高级用户




积分 916
发帖 377
注册 2004-3-8
状态 离线
『第 7 楼』:  

不知道这段VBS是否支持空格,不过从某种情况下偶更宁愿建个.lnk文件直接使用copy的方式释放,用iexpress打包就行了,psexec执行,脚本有时候用起来也烦一堆的ABC
'Create autoshutdown Desktop icon
Set Shell = CreateObject("WScript.Shell")
DesktopPath = Shell.SpecialFolders("AllUsersDesktop")
Set link = Shell.CreateShortcut(DesktopPath & "\自动关机.lnk")
link.Arguments = "-s -t 0 -f"
link.Description = "自动关闭计算机"
'link.HotKey = "CTRL+ALT+SHIFT+E"
link.IconLocation = "%SystemRoot%\system32\shutdown.exe"
link.TargetPath = "%SystemRoot%\system32\shutdown.exe"
link.WindowStyle = 7
link.WorkingDirectory = "%systemroot%"
link.Save

Const ALL_USERS_DESKTOP = &H19&

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.NameSpace(ALL_USERS_DESKTOP)

Set objFolderItem = objFolder.ParseName("自动关机.lnk")
Set objShortcut = objFolderItem.GetLink

objShortcut.SetIconLocation "%systemroot%\System32\SHELL32.dll", 27
objShortcut.Save




http://dato.ys168.com
google search bot
http://dato.minidns.net/
2008-8-2 13:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『第 8 楼』:  

谢谢 dato,这个VBS脚本也无法实现带参数的特殊路径。
COPY方法是无法实现的我所要求的,因为我是自动根据软件安装的目录自动替换对应路径,因为有些软件要创建一大堆快捷方式,如果我是先使用RAR压缩后自动解包到对应路径,如果释放目录和源安装目录相同,那么就自动跳过,如果不相同,则使用SHORTCUT命令来自动替换对应路径。

2008-8-2 14:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『第 9 楼』:  

试过使用WINRAR打包,也无法建立这种特殊参数的快捷方式。真失望。

2008-8-2 17:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『第 10 楼』:  

问题已经圆满解决,经过在外国网站疯狂搜索,才发现shortcut有一个特别的转移符号\,呵呵,要保留双引号",那么只要在其前面加上\就可以,由于发现有些快捷方式路径后也有一个\符号,如"D:\UGS\",这些可能产生冲突,所以先面的批处理进行了相应处理,避免了这种情况的发生.经过测试,对于带很多复杂参数的快捷键已经可以完全正确处理了.
@ECHO OFF
REM 当改变了文件路径后批量替换(修复)快捷方式.变量LNKPATH为需要替换的快捷方式文件夹的路径;OLDPATH为原始文件安装路径;NEWPATH为新的移动路径
REM 假设安装了CATIA后移动了文件路径或者要制作绿色CATIA,那么快捷方式路径应该做相应变化

SET LNKPATH="D:\UGS\GTOOLS\SCUT"
SET OLDPATH="D:\UGS"
SET NEWPATH="D:\Program Files\UGS"

SET PATH=%CD%;%CD%\GTOOLS\;%PROGRAMFILES%\WINRAR;%PATH%
IF NOT EXIST ".\GTOOLS\BS.exe" SET ERR=安装支持目录下缺少字符替换工具,安装程序无法继续&&GOTO:ERROR
IF NOT EXIST ".\GTOOLS\SC.exe" SET ERR=安装支持目录缺少快捷方式创建工具,安装程序无法继续&&GOTO:ERROR
FOR /F "DELIMS=" %%I IN ('DIR /B/S "%LNKPATH%\*.LNK"') DO (
     SC /F:"%%I" /A:Q>"%TEMP%\SCUT.TXT"
     BS "%TEMP%\SCUT.TXT" %OLDPATH% %NEWPATH% /I
     BS "%TEMP%\SCUT.TXT" """ "\\"" /I>NUL&CLS
     BS "%TEMP%\SCUT.TXT" "\\\\" "\\" /I>NUL&CLS
     setlocal enabledelayedexpansion
     FOR /F "TOKENS=1,* DELIMS==" %%A IN (%TEMP%\SCUT.TXT) DO CALL SET %%A=%%B
     IF DEFINED Arguments IF "!Arguments:~-1!"=="\" (SET Arguments=!Arguments!\)
     IF DEFINED WorkingDirectory IF "!WorkingDirectory:~-1!"=="\" (SET WorkingDirectory=!WorkingDirectory!\) ELSE (SET WorkingDirectory=!WorkingDirectory!\\)
     SC.EXE /F:"%%I" /A:E /T:"!TargetPath!" /P:"!Arguments!" /W:"!WorkingDirectory!" /I:"!IconLocation!" /D:"鸿越软件" >NUL
     endlocal
)
SET ERR=替换修复完成,谢谢您使用鸿越软件制作的该工具&&GOTO:ERROR
:ERROR
>"%TEMP%\Temp.vbs"   Echo intAnswer = MsgBox("%ERR%" , vbYes, "鸿越软件温馨提示您!")
cscript //nologo "%TEMP%\Temp.vbs"
IF EXIST "%TEMP%" DEL /F/S/Q/A "%TEMP%\*.*">NUL
EXIT


   此帖被 +2 点积分    点击查看详情   
评分人:【 mkd 分数: +2  时间:2008-8-4 09:46


2008-8-4 08:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: