2008-12-06 15 views
24

बैच फ़ाइल से exe के लिए शॉर्टकट कैसे बनाएं।बैच फ़ाइल से exe के लिए शॉर्टकट बनाना

मैं

call link.bat "c:\program Files\App1\program1.exe" "C:\Documents and Settings\%USERNAME%\Desktop" "C:\Documents and Settings\%USERNAME%\Start Menu\Programs" "Program1 shortcut" 

की कोशिश की, लेकिन यह काम नहीं किया।

link.bat http://www.robvanderwoude.com/amb_shortcuts.html

+6

न करें मान लें कि प्रोग्राम फ़ाइलें "सी: \ प्रोग्राम फ़ाइलें" पर हैं।(% PROGRAMFILES% काम कर सकते हैं, यद्यपि)। इसी प्रकार, यह न मानें कि उपयोगकर्ता की होम निर्देशिका "सी: \ दस्तावेज़ और सेटिंग्स \% USERNAME%" में है (यह% HOMEDIR% है)। और डेस्कटॉप डेस्कटॉप नहीं कहा जा सकता है। –

+0

क्या विंडोज 7 पर शॉर्टकट बनाने के लिए कोई समाधान उपलब्ध है? – JoeYo

+3

@JayBazuzi यह विंडोज 7, 8, और सर्वर 2012 पर '% होमपैथ%' है। :) – wasatchwizard

उत्तर

23

आपका लिंक विंडोज 95/98 संस्करण पर इंगित करता है और मुझे लगता है कि आपके पास कम से कम Windows 2000 या XP है। आपको एनटी संस्करण here आज़माएं।

वैकल्पिक रूप से एक छोटे से VBScript कि आप कमांड लाइन से कॉल कर सकते हैं का उपयोग करें:

set objWSHShell = CreateObject("WScript.Shell") 
set objFso = CreateObject("Scripting.FileSystemObject") 

' command line arguments 
' TODO: error checking 
sShortcut = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(0)) 
sTargetPath = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(1)) 
sWorkingDirectory = objFso.GetAbsolutePathName(sShortcut) 

set objSC = objWSHShell.CreateShortcut(sShortcut) 

objSC.TargetPath = sTargetPath 
objSC.WorkingDirectory = sWorkingDirectory 

objSC.Save 

createLink.vbs के रूप में फ़ाइल सहेजें और इसे इस तरह कहते हैं क्या आप मूल रूप से करने की कोशिश की पाने के लिए:

cscript createLink.vbs "C:\Documents and Settings\%USERNAME%\Desktop\Program1 shortcut.lnk" "c:\program Files\App1\program1.exe" 
cscript createLink.vbs "C:\Documents and Settings\%USERNAME%\Start Menu\Programs\Program1 shortcut.lnk" "c:\program Files\App1\program1.exe" 

मैंने कहा कि मैं आपको "स्टार्ट मेनू" जैसे हार्डकोडेड पथों का उपयोग न करने का आग्रह करता हूं क्योंकि वे विंडोज़ के स्थानीय संस्करणों में अलग हैं। special folders का उपयोग करने के लिए स्क्रिप्ट को संशोधित करें।

+1

मैंने वर्किंग डायरेक्टरी को ठीक से सेट करने के लिए कुछ पंक्तियां जोड़ दी हैं यदि लक्ष्य एक एक्सई है - इसके बिना, कोई भी exe जो होने की अपेक्षा करता है इसकी अपनी निर्देशिका से लॉन्च विफल हो जाएगा, आमतौर पर एक अर्थहीन त्रुटि संदेश के साथ। – Mason

+0

@ मेसन: क्या आप अपने सुधार पोस्ट कर सकते हैं? वास्तव में मेरी मदद करेंगे। – aRestless

+1

@aRestless: क्षमा करें, मैंने एक संपादन सबमिट किया और इसे स्पष्ट रूप से खारिज कर दिया गया था। Mod objSC से पहले निम्न अधिकार जोड़ना है। सेव: यदि इनएसआरटी (एसटी लक्ष्यपैथ, ".exe")> 0 फिर objSC.WorkingDirectory = बाएं (sTargetPath, InStrRev (sTargetPath, "\")) अंत यदि – Mason

1

वैकल्पिक विधि में पाया जा सकता, एक तीसरी पार्टी सुविधा का उपयोग:

Creating a Shortcut from the command line (batch file)

XXMKLINK:

XXMKLINK साथ

, आप एक लिख सकते हैं सॉफ्टवेयर स्थापना के लिए बैच फ़ाइल जो विशेष स्थापनाद्वारा की गई हैकार्यक्रम। असल में, XXMKLINK एक ऐसा उपकरण है जो कमांड लाइन से विभिन्न जानकारी एकत्र करता है और उसे शॉर्टकट में पैकेज करता है।

xxmklink spath opath 

where 

    spath  path of the shortcut (.lnk added as needed) 
    opath  path of the object represented by the shortcut 
10

का उपयोग VBScript:

set WshShell = WScript.CreateObject("WScript.Shell") 
strDesktop = WshShell.SpecialFolders("AllUsersDesktop") 
set oShellLink = WshShell.CreateShortcut(strDesktop & "\shortcut name.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 

रेफरी: http://www.tomshardware.com/forum/52871-45-creating-desktop-shortcuts-command-line

असफल एक त्वरित गूगल खोज वहाँ तृतीय पक्ष टूल अनुप्रयोग शॉर्टकट के लिए फ़ाइलों .lnk बना सकते हैं की एक संख्या है पता चलता है कि, । मुझे लगता है कि आपको उन चीजों से चिपकने की ज़रूरत है जो विंडोज़ पर मूल रूप से उपलब्ध हैं? वीबीस्क्रिप्ट शायद आपकी सबसे अच्छी शर्त है, अन्यथा मैं आपकी मशीन से .lnk फ़ाइल की प्रतिलिपि बनाने या शॉर्टकट फ़ाइल के लिए सही प्रारूप देखने के लिए इसे नमूना के रूप में उपयोग करने का सुझाव देना चाहूंगा।

1

अतिरिक्त ध्यान दें: link.bat आप उपयोग कर रहे Windows 95/98 के लिए ही है:

इस बैच फ़ाइल Windows 95/98 के लिए ही है। मैं एनटी समकक्ष को एनटी न्यूज ग्रुप में जल्द ही पोस्ट करूंगा।

एनटी संस्करण http://www.robvanderwoude.com/amb_shortcutsnt.html पर पोस्ट किया गया है। यदि आप vbscript पर प्राथमिकता देते हैं तो आप इसे .bat दृष्टिकोण के लिए आज़मा सकते हैं।

12

यह ऐसी चीज है जो पावरशेल वास्तव में अच्छी है, और इसलिए बैच फ़ाइलों को छोड़ने और बैंडशैगन पावरशेल पर पहुंचने का एक कारण है।

पावरशेल .NET से बात कर सकता है। उदाहरण के लिए, अगर आप इस तरह डेस्कटॉप के स्थान प्राप्त कर सकते हैं:

[Environment]::GetFolderPath("Desktop") 

PowerShell कॉम को WScript.Shell सहित वस्तुओं, बात कर सकते हैं, शॉर्टकट बना सकते हैं जो:

New-Object -ComObject WScript.Shell).CreateShortcut(...) 

तो अपनी स्क्रिप्ट लग सकता है जैसे:

$linkPath = Join-Path ([Environment]::GetFolderPath("Desktop")) "MyShortcut.lnk" 
$targetPath = Join-Path ([Environment]::GetFolderPath("ProgramFiles")) "MyCompany\MyProgram.exe" 
$link = (New-Object -ComObject WScript.Shell).CreateShortcut($linkpath) 
$link.TargetPath = $targetPath 
$link.Save() 

शॉर्टकट एडमिनिस्ट्रेशन के रूप में "रन की तरह सेटिंग्स का एक बहुत है कि WScript.Shell में हेरफेर नहीं कर सकते, है स्ट्रेटर "विकल्प। ये केवल Win32 इंटरफ़ेस IShellLinkDataList के माध्यम से पहुंच योग्य हैं, जो उपयोग करने के लिए एक वास्तविक दर्द है, लेकिन यह किया जा सकता है।

3

XP पर मैं makeshortcut.vbs लिखा

Set oWS = WScript.CreateObject("WScript.Shell") 
If wscript.arguments.count < 4 then 
    WScript.Echo "usage: makeshortcut.vbs shortcutPath targetPath arguments workingDir " 
    WScript.Quit 
end If 
shortcutPath = wscript.arguments(0) & ".LNK" 
targetPath = wscript.arguments(1) 
arguments = wscript.arguments(2) 
workingDir = wscript.arguments(3) 

WScript.Echo "Creating shortcut " & shortcutPath & " targetPath=" & targetPath & " arguments=" & arguments & " workingDir=" & workingDir 

Set oLink = oWS.CreateShortcut(shortcutPath) 
oLink.TargetPath = targetPath 
oLink.Arguments = arguments 
' oLink.Description = "MyProgram" 
' oLink.HotKey = "ALT+CTRL+F" 
' oLink.IconLocation = "C:\Program Files\MyApp\MyProgram.EXE, 2" 
' oLink.WindowStyle = "1" 
oLink.WorkingDirectory = workingDir 
oLink.Save 

यह बिल्कुल 4 आर्ग लेता है, तो यह बाद में 2 optional.I बनाकर सुधार किया जा सकता केवल पोस्ट क्योंकि यह गूंज के उपयोग, जो कुछ करने के लिए उपयोगी हो सकता है । मुझे विशेष फ़ोल्डर्स और एक्सपैंड एंटरटेनमेंट्स का उपयोग करके डब्ल्यूएस के सोलन पसंद हैं

0

यह मेरे लिए विंडोज एक्सपी एमएस-डॉस पर काम करता है, मैंने अभी भी विंडोज 7 पर यह कोशिश नहीं की है। यह लिनक्स में एक प्रतीकात्मक लिंक बनाने जैसा है।

shortcut -T source.exe destination.lnk 
+0

ऐसा कोई आदेश नहीं है। – henginy

+0

@henginy क्या आपने आदेश का प्रयास किया था? यह "विंडोज स्क्रिप्ट होस्ट" का उपयोग करके किया जाता है। –

+0

बेशक, लेकिन मैंने इसे कमांड प्रॉम्प्ट में आजमाया है क्योंकि यह अन्यथा निर्दिष्ट नहीं है। मैं डब्ल्यूएस होस्ट में भी कोशिश करूंगा। – henginy

0

अंत में मैं, सही स्क्रिप्ट लिखने का फैसला किया क्योंकि कोई समाधान मेरे लिए काम करता आप \ पहले

दो 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 25\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 
1

संपादित 24.6.14 - निम्नलिखित कार्यक्षमताओं कहा: -संपादित शॉर्टकट एक शॉर्टकट सेट/निकालें "व्यवस्थापक के रूप में चलाएँ" मोटी

की -List गुण

Here स्क्रिप्ट का एक बनाए रखा संस्करण

विंडोज स्क्रिप्ट एच का उपयोग करते समय पाया जा सकता है ost मैं JScript पसंद करते हैं के रूप में यह न विषाक्त संदेशों और न ही अस्थायी files.Here मेरा shortcutJS.bat साथ संकर फ़ाइलों के निर्माण की अनुमति देता है (यदि आप इसे नामित कर सकते हैं के रूप में आप की तरह) आप सभी शॉर्टकट गुणों का उपयोग करने की अनुमति:

@if (@X)==(@Y) @end /* JScript comment 
@echo off 

cscript //E:JScript //nologo "%~f0" "%~nx0" %* 

exit /b %errorlevel% 
@if (@X)==(@Y) @end JScript comment */ 


    var args=WScript.Arguments; 
    var scriptName=args.Item(0); 
    //var adminPermissions= false; 
    var edit= false; 

    function printHelp() { 
    WScript.Echo(scriptName + " -linkfile link -target target [-linkarguments linkarguments] "+ 
    " [-description description] [-iconlocation iconlocation] [-hotkey hotkey] "+ 
    " [-windowstyle 1|3|7] [-workingdirectory workingdirectory] [-adminpermissions yes|no]"); 
    WScript.Echo(); 
     WScript.Echo(scriptName + " -edit link [-target target] [-linkarguments linkarguments] "+ 
    " [-description description] [-iconlocation iconlocation] [-hotkey hotkey] "+ 
    " [-windowstyle 1|3|7] [-workingdirectory workingdirectory] [-adminpermissions yes|no]"); 
    WScript.Echo(); 
    WScript.Echo(scriptName + " -examine link"); 
    WScript.Echo(); 
    WScript.Echo(" More info: http://msdn.microsoft.com/en-us/library/xk6kst2k%28v=vs.84%29.aspx "); 



    } 

    // reads the given .lnk file as a char array 
    function getlnkChars(lnkPath) { 
     // :: http://www.dostips.com/forum/viewtopic.php?f=3&t=3855&start=15&p=28898 :: 
     var ado = WScript.CreateObject("ADODB.Stream"); 
     ado.Type = 2; // adTypeText = 2 

     ado.CharSet = "iso-8859-1"; // code page with minimum adjustments for input 
     ado.Open(); 
     ado.LoadFromFile(lnkPath); 

     var adjustment = "\u20AC\u0081\u201A\u0192\u201E\u2026\u2020\u2021" + 
         "\u02C6\u2030\u0160\u2039\u0152\u008D\u017D\u008F" + 
         "\u0090\u2018\u2019\u201C\u201D\u2022\u2013\u2014" + 
         "\u02DC\u2122\u0161\u203A\u0153\u009D\u017E\u0178" ; 


     var fs = new ActiveXObject("Scripting.FileSystemObject"); 
     var size = (fs.getFile(lnkPath)).size; 

     var lnkBytes = ado.ReadText(size); 
     ado.Close(); 
     var lnkChars=lnkBytes.split(''); 
     for (var indx=0;indx<size;indx++) { 
      if (lnkChars[indx].charCodeAt(0) > 255) { 
       lnkChars[indx] = String.fromCharCode(128 + adjustment.indexOf(lnkChars[indx])); 
      } 
     } 
     return lnkChars; 

    } 


    function hasAdminPermissions(lnkPath) { 
     return (getlnkChars(lnkPath))[21].charCodeAt(0) == 32 ; 
    } 


    function setAdminPermissions(lnkPath , flag) { 
     lnkChars=getlnkChars(lnkPath); 
     var ado = WScript.CreateObject("ADODB.Stream"); 
     ado.Type = 2; // adTypeText = 2 
     ado.CharSet = "iso-8859-1"; // right code page for output (no adjustments) 
     //ado.Mode=2; 
     ado.Open(); 
     // setting the 22th byte to 32 
     if (flag) { 
      lnkChars[21]=String.fromCharCode(32); 
     } else { 
      lnkChars[21]=String.fromCharCode(0); 
     } 
     ado.WriteText(lnkChars.join("")); 
     ado.SaveToFile(lnkPath, 2); 
     ado.Close(); 

    } 

    function examine(lnkPath) { 

     var fs = new ActiveXObject("Scripting.FileSystemObject"); 
     if (!fs.FileExists(lnkPath)) { 
     WScript.Echo("File " + lnkPath + " does not exist"); 
     WScript.Quit(2); 
     } 

     var oWS = new ActiveXObject("WScript.Shell"); 
     var oLink = oWS.CreateShortcut(lnkPath); 

     WScript.Echo("");  
     WScript.Echo(lnkPath + " properties:"); 
     WScript.Echo(""); 
     WScript.Echo("Target: " + oLink.TargetPath); 
     WScript.Echo("Icon Location: " + oLink.IconLocation); 
     WScript.Echo("Description: " + oLink.Description); 
     WScript.Echo("Hotkey: " + oLink.HotKey); 
     WScript.Echo("Working Directory: " + oLink.WorkingDirectory); 
     WScript.Echo("Window style: " + oLink.WindowStyle); 
     WScript.Echo("Admin Permissions: " + hasAdminPermissions(lnkPath)); 

     WScript.Quit(0); 
    } 


    if (WScript.Arguments.Length==1 || args.Item(1).toLowerCase() == "-help" || args.Item(1).toLowerCase() == "-h") { 
    printHelp(); 
    WScript.Quit(0); 
    } 

    if (WScript.Arguments.Length % 2 == 0) { 
    WScript.Echo("Illegal arguments "); 
    printHelp(); 
    WScript.Quit(1); 
    } 

    if (args.Item(1).toLowerCase() == "-examine") { 

     var linkfile = args.Item(2); 
     examine(linkfile); 
    } 

    if (args.Item(1).toLowerCase() == "-edit") { 
     var linkfile = args.Item(2); 
     edit=true; 
    } 

    if(!edit) { 
     for (var arg = 1;arg<5;arg=arg+2) { 

      if (args.Item(arg).toLowerCase() == "-linkfile") { 
       var linkfile = args.Item(arg+1); 
      } 

      if (args.Item(arg).toLowerCase() == "-target") { 
       var target = args.Item(arg+1); 
      } 
     } 
    } 

    if (typeof linkfile === 'undefined') { 
    WScript.Echo("Link file not defined"); 
    printHelp(); 
    WScript.Quit(2); 
    } 

    if (typeof target === 'undefined' && !edit) { 
    WScript.Echo("Target not defined"); 
    printHelp(); 
    WScript.Quit(3); 
    } 


    var oWS = new ActiveXObject("WScript.Shell"); 
    var oLink = oWS.CreateShortcut(linkfile); 


    if(typeof target === 'undefined') { 
     var startIndex=3; 
    } else { 
     var startIndex=5; 
     oLink.TargetPath = target; 
    } 


    for (var arg = startIndex ; arg<args.Length;arg=arg+2) { 

     if (args.Item(arg).toLowerCase() == "-linkarguments") { 
      oLink.Arguments = args.Item(arg+1); 
     } 

     if (args.Item(arg).toLowerCase() == "-description") { 
      oLink.Description = args.Item(arg+1); 
     } 

     if (args.Item(arg).toLowerCase() == "-hotkey") { 
      oLink.HotKey = args.Item(arg+1); 
     } 

     if (args.Item(arg).toLowerCase() == "-iconlocation") { 
      oLink.IconLocation = args.Item(arg+1); 
     } 

     if (args.Item(arg).toLowerCase() == "-windowstyle") { 
      oLink.WindowStyle = args.Item(arg+1); 
     } 

     if (args.Item(arg).toLowerCase() == "-workdir") { 
      oLink.WorkingDirectory = args.Item(arg+1); 
     } 


     if (args.Item(arg).toLowerCase() == "-adminpermissions") { 
      if(args.Item(arg+1).toLowerCase() == "yes") { 
       var adminPermissions= true; 
      } else if(args.Item(arg+1).toLowerCase() == "no") { 
       var adminPermissions= false; 
      } else { 
       WScript.Echo("Illegal arguments (admin permissions)"); 
       WScript.Quit(55); 
      } 
     } 
    } 
    oLink.Save(); 

    if (!(typeof adminPermissions === 'undefined')) { 
     setAdminPermissions(linkfile ,adminPermissions); 
    } 
संबंधित मुद्दे