création d'un raccourci pour un exe à partir d'un fichier de commandes

comment créer un raccourci pour un exe à partir d'un fichier de commandes.

j'ai essayé

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"

mais il n'a pas travaillé.

lien.chauve-souris peut être trouvé à http://www.robvanderwoude.com/amb_shortcuts.html

24
demandé sur Jay Bazuzi 2008-12-06 11:59:56
la source

9 ответов

votre lien pointe vers une version de Windows 95/98 et je suppose que vous avez au moins Windows 2000 ou XP. Vous devriez essayer la version NT ici.

alternativement utilisez un petit VBScript que vous pouvez appeler depuis la ligne de commande:

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

Enregistrer le fichier comme createLink.vbs et de l'appeler comme ça pour obtenir ce que vous avez initialement essayé:

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" 

cela dit, je vous recommande vivement de ne pas utiliser de chemins codés comme "Start Menu" car ils sont différents dans localisés les versions de windows. Modifiez le script à la place pour utiliser dossiers spéciaux.

23
répondu VVS 2012-07-20 14:08:57
la source

C'est le genre de chose que PowerShell est vraiment bon à, et est donc une raison d'éviter les fichiers batch et de prendre le train en marche.

PowerShell peut parler à .NET

à l'Aide de 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 

Réf: http://www.tomshardware.com/forum/52871-45-creating-desktop-shortcuts-command-line

A défaut, une recherche rapide sur google montre qu'il y a un certain nombre d'outils tiers qui peuvent créer .fichiers lnk pour raccourcis d'application. Je suppose que vous devez vous en tenir à des choses qui sont disponibles nativement sur les fenêtres cependant? VBscript est probablement votre meilleure chance, sinon je vous conseille d'essayer de copier le .fichier INK de votre machine ou en l'utilisant comme un échantillon pour voir le format correct pour un fichier de raccourci.

10
répondu Jay 2008-12-06 12:32:08
la source

Sur XP j'ai écrit 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

il faut exactement 4 args, donc il pourrait être amélioré en rendant les 2 derniers optionnels.Je ne poste, car il l'écho de l'utilisation qui pourrait être utile à certains. J'aime le soln de WS en utilisant des dossiers spéciaux et des liens Expandenvironnement

3
répondu Martin yarwood 2010-11-17 14:38:42
la source

remarque supplémentaire: le lien.chauve-souris que vous utilisez pour Windows 95/98 seulement:

Ce fichier batch est pour Windows 95/98 seulement. Je vais poster le NT équivalent dans le NT de groupe de discussion bientôt.

la version NT est affichée à http://www.robvanderwoude.com/amb_shortcutsnt.html à la place. Vous essayez peut-être que pour un .bat approche si l'on préfère de plus de vbscript.

1
répondu Jay 2008-12-06 12:34:29
la source

autre méthode, à l'aide d'un utilitaire tiers:

création d'un raccourci à partir de la ligne de commande (fichier batch)

XXMKLINK:

avec XXMKLINK, vous pouvez écrire un fichier batch pour le logiciel installation réalisée par une installation spécialisée programme. Fondamentalement, XXMKLINK est un outil qui rassemble divers des informations à partir d'une ligne de commande et paquets dans un raccourci.

xxmklink spath opath 

where 

  spath     path of the shortcut (.lnk added as needed)
  opath     path of the object represented by the shortcut
1
répondu Martin 2014-07-24 12:49:39
la source

EDIT 24.6.14 - fonctionnalités ajoutées: -Modifier le raccourci -Liste des propriétés d'un raccourci -Définir/Supprimer "Exécuter en tant qu'administrateur" d'épaisseur

Ici a maintenu la version du script peut être trouvé

en utilisant Windows Script Host je préfère jscript car il permet de créer des fichiers hybrides sans messages toxiques ni fichiers temporaires.Voici mon shortcutJS.bat (vous pouvez l'appeler comme vous voulez ) vous permettant d'utiliser tous propriétés de raccourci:

@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);
   }
1
répondu npocmaka 2017-01-14 18:53:42
la source

cela a fonctionné pour moi sur Windows XP ms-dos, Je n'ai toujours pas essayé sur Windows 7. C'est comme créer un lien symbolique dans Linux.

shortcut -T source.exe destination.lnk
0
répondu Gabriel Ramirez 2012-03-17 00:55:01
la source

a la fin j'ai décidé d'écrire le bon script, parce qu'aucune solution ne fonctionne pour moi Vous aurez besoin de deux paramètres fileLocal\ premier

createSCUT.chauve-souris

@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%

et la deuxième

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
0
répondu Michael Przybylski 2013-10-06 13:15:44
la source

Autres questions sur