2012-01-01 11 views
0

我有一個windows.bat文件,它實際上是我的自定義安裝程序。當所有東西都安裝好後,我終於需要創建一個桌面快捷方式圖標,它有圖標和鏈接來執行我的Java jar。我成功地做了一個,但它使用的VBS,我現在要做的是避免使用VBS,但完全使用BATCH文件。但是,我如何在BATCH文件中進行如下操作?如何使用運行我的Java應用程序的BATCH文件創建快捷方式圖標?

例子:

enter image description here

1)創建一個空文件vbs.vbs並粘貼此代碼到桌面

set WshShell = WScript.CreateObject("WScript.Shell") 
strDesktop = WshShell.SpecialFolders("AllUsersDesktop") 
set oShellLink = WshShell.CreateShortcut(strDesktop & "\StackOverflow shortcut.lnk") 
oShellLink.TargetPath = "c:\application folder\application.exe" 
oShellLink.WindowStyle = 1 
oShellLink.IconLocation = "c:\application folder\application.ico" 
oShellLink.Description = "Shortcut Script" 
oShellLink.WorkingDirectory = "c:\application folder" 
oShellLink.Save 

2)雙擊該文件vbs.vbs並立即它在Windows XP中測試的桌面創建一個快捷方式文件

但是我如何跳過VBS進程和d完全來自我的BATCH腳本? (是否有使用RUNDLL32.EXE APPWIZ.CPL,NewLinkHere (Dest)任何方式)

+0

你想讓它適用於Windows XP的工作向上? – rene 2012-01-01 12:25:56

+0

@rene:Windows XP,Vista,Windows 7,Windows 8.我想讓它工作。 – YumYumYum 2012-01-01 12:28:12

回答

3

這是問和之前在這裏找到答案:

creating a shortcut for a exe from a batch file

其中提供的答案(而不是接受一個)有此鏈接:

http://www.robvanderwoude.com/amb_shortcutsnt.php

相關腳本是:

@echo off & setlocal 
::For Windows NT 4.0 users only!!! 
::Creates LNK and PIF files from the command line. 
::Author: Walter Zackery 
if not %1[==[ if exist %1 goto start 
echo You must pass the path of a file or folder to the 
echo batch file as a shortcut target. 
if not %1[==[ echo %1 is not an existing file or folder 
(pause & endlocal & goto:eof) 
:start 
(set hkey=HKEY_CURRENT_USER\Software\Microsoft\Windows) 
(set hkey=%hkey%\CurrentVersion\Explorer\Shell Folders) 
(set inf=rundll32 setupapi,InstallHinfSection DefaultInstall) 
start/w regedit /e %temp%\#57#.tmp "%hkey%" 

for /f "tokens=*" %%? in (
'dir/b/a %1? 2^>nul') do (set name=%%~nx?) 

for /f "tokens=2* delims==" %%? in (
'findstr/b /i """desktop"""= %temp%\#57#.tmp') do (set d=%%?) 

for /f "tokens=2* delims==" %%? in (
'findstr/b /i """programs"""= %temp%\#57#.tmp') do (set p=%%?) 

(set d=%d:\\=\%) & (set p=%p:\\=\%) 
if not %2[==[ if exist %~fs2\nul (set d=%~fs2) 
if not %2[==[ if exist %~fs2nul (set d=%~fs2) 
set x=if exist %2\nul 
if not %2[==[ if not %d%==%2 %x% if "%~p2"=="\" set d=%2 
echo %d%|find ":\" >nul||(set d=%d%\) 
(set file=""""""%1"""""") 
for /f "tokens=1 delims=:" %%? in ("%file:"=%") do set drive=%%? 
(set progman=setup.ini, progman.groups,,) 
echo > %temp%\#k#.inf [version] 
echo >>%temp%\#k#.inf signature=$chicago$ 
echo >>%temp%\#k#.inf [DefaultInstall] 
echo >>%temp%\#k#.inf UpdateInis=Addlink 
echo >>%temp%\#k#.inf [Addlink] 
echo >>%temp%\#k#.inf %progman% ""group200="}new{""" 
echo >>%temp%\#k#.inf setup.ini, group200,, """%name%"",%file% 
start/w %inf% 132 %temp%\#k#.inf 
del %temp%\#k#.inf %temp%\#57#.tmp 
move %p%\"}new{\*.*" %d% >nul 2>&1 
rd %p%\}new{ 2>nul 
move %p%\}new{.lnk %d%\"drive %drive%.lnk" >nul 2>&1 
endlocal 

不知道是否會一路飛入Win7和8

+0

有沒有可用於在Windows 7上創建快捷方式的解決方案? – JoeYo 2013-01-03 08:06:44

+1

@JoeYo我不確定,OP要求它在win 7上工作,他接受了,所以我認爲這個工作。試一試 – rene 2013-01-03 08:43:29

+0

,因爲它明確表示_僅適用於Windows NT 4.0用戶!!! _我沒有嘗試過,而是在[link](http://www.sevenforums.com/general-討論/ 43230-make-shortcuts-using-batch-file.html) 也會檢查它,如果這不起作用。謝謝 – JoeYo 2013-01-03 10:44:31

1

最後,我決定寫正確的腳本,因爲沒有解決方案適用於我 您將需要兩個fileLocal設置\ 第一

createSCUT.bat

@echo on 
set VBS=createSCUT.vbs 
set SRC_LNK="shortcut1.lnk" 
set ARG1_APPLCT="C:\Program Files\Google\Chrome\Application\chrome.exe" 
set ARG2_APPARG="--profile-directory=QuteQProfile 25QuteQ" 
set ARG3_WRKDRC="C:\Program Files\Google\Chrome\Application" 
set ARG4_ICOLCT="%USERPROFILE%\Local Settings\Application Data\Google\Chrome\User Data\Profile 28\Google Profile.ico" 
cscript %VBS% %SRC_LNK% %ARG1_APPLCT% %ARG2_APPARG% %ARG3_WRKDRC% %ARG4_ICOLCT% 

和第二

createSCUT.vbs

Set objWSHShell = WScript.CreateObject("WScript.Shell") 
set objWSHShell = CreateObject("WScript.Shell") 
set objFso = CreateObject("Scripting.FileSystemObject") 
If WScript.arguments.count = 5 then 
    WScript.Echo "usage: makeshortcut.vbs shortcutPath targetPath arguments workingDir IconLocation" 
    sShortcut = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(0)) 
    set objSC = objWSHShell.CreateShortcut(sShortcut) 
    sTargetPath = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(1)) 
    sArguments = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(2)) 
    sWorkingDirectory = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(3)) 
    sIconLocation = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(4)) 
    objSC.TargetPath = sTargetPath 
    rem http://www.bigresource.com/VB-simple-replace-function-5bAN30qRDU.html# 
    objSC.Arguments = Replace(sArguments, "QuteQ", Chr(34)) 
    rem http://msdn.microsoft.com/en-us/library/f63200h0(v=vs.90).aspx http://msdn.microsoft.com/en-us/library/267k4fw5(v=vs.90).aspx 
    objSC.WorkingDirectory = sWorkingDirectory 
    objSC.Description = "Love Peace Bliss" 
    rem 1 restore 3 max 7 min 
    objSC.WindowStyle = "3" 
    rem objSC.Hotkey = "Ctrl+Alt+e"; 
    objSC.IconLocation = sIconLocation 
    objSC.Save 
    WScript.Quit 
end If 
If WScript.arguments.count = 4 then 
    WScript.Echo "usage: makeshortcut.vbs shortcutPath targetPath arguments workingDir " 

    sShortcut = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(0)) 
    set objSC = objWSHShell.CreateShortcut(sShortcut) 
    sTargetPath = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(1)) 
    sArguments = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(2)) 
    sWorkingDirectory = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(3)) 
    objSC.TargetPath = sTargetPath 
    objSC.Arguments = Replace(sArguments, "QuteQ", Chr(34)) 
    objSC.WorkingDirectory = sWorkingDirectory 
    objSC.Description = "Love Peace Bliss" 
    objSC.WindowStyle = "3" 
    objSC.Save 
    WScript.Quit 
end If 
If WScript.arguments.count = 2 then 
    WScript.Echo "usage: makeshortcut.vbs shortcutPath targetPath" 
    sShortcut = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(0)) 
    set objSC = objWSHShell.CreateShortcut(sShortcut) 
    sTargetPath = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(1)) 
    sWorkingDirectory = objFso.GetAbsolutePathName(sShortcut) 
    objSC.TargetPath = sTargetPath 
    objSC.WorkingDirectory = sWorkingDirectory 
    objSC.Save 
    WScript.Quit 
end If 
相關問題