CMDからショートカットを作成する方法は?


76

.lnkコマンドラインユーティリティを使用して、別のファイルまたは実行可能ファイルへのショートカットファイル()を作成するにはどうすればよいですか?


1
それを行う簡単な方法はないようです。一部の人々は、それを可能にするツールを書いています。ここにそれらの1つがあります。「windows create shortcut command line」をGoogleで検索すると、他の検索結果が表示されます。(私はそれらのいずれも試していません。)
キーストンプソン

@iglvzx-あなたが行った編集が正しいかどうかわかりません。Shantanuにはバッチスクリプトが必要だとは思いません。別の* .exeファイルに* .lnkを作成する方法は何でもかまいません。
アルファシン

(.ink file)混乱があったので、@ alfasinを追加しました。Shantanuのコメントを反映するために質問を修正しました。「ショートカット」を作成する方法は提供しますが、この特定の質問には答えません。
iglvzx

1
次を使用します。powershell "$ s =(New-Object -COM WScript.Shell).CreateShortcut( '%userprofile%\ Desktop \ shortcut.lnk'); $ s.TargetPath = 'C:\ Windows \'; $ s .Save() "明らかに、「 '%userprofile%\ Desktop \ shortcut.lnk」と「C:\ Windows \」をそれぞれショートカットパスとターゲットパスに置き換えます。
カウリネーター

@cowlinator入力したとおり、提案は機能しません。
-Ploni

回答:


53

このサイトには非常に役立つ情報があります:http : //ss64.com/nt/shortcut.html

いくつかありますように思えるshortcut.exe私が持っていないいくつかのリソースキットでは。
他の多くのサイトで言及されているように、バッチファイルから実行する組み込みの方法はありません。

しかし、あなたはVBスクリプトからそれを行うことができます:

以下のVBscriptのオプションセクションはコメント化されています。

Set oWS = WScript.CreateObject("WScript.Shell")
sLinkFile = "C:\MyShortcut.LNK"
Set oLink = oWS.CreateShortcut(sLinkFile)
    oLink.TargetPath = "C:\Program Files\MyApp\MyProgram.EXE"
 '  oLink.Arguments = ""
 '  oLink.Description = "MyProgram"   
 '  oLink.HotKey = "ALT+CTRL+F"
 '  oLink.IconLocation = "C:\Program Files\MyApp\MyProgram.EXE, 2"
 '  oLink.WindowStyle = "1"   
 '  oLink.WorkingDirectory = "C:\Program Files\MyApp"
oLink.Save

したがって、本当に必要な場合は、バッチファイルでVBスクリプトをディスクに書き込み、それを呼び出してから再度削除することができます。たとえば、次のように:

@echo off
echo Set oWS = WScript.CreateObject("WScript.Shell") > CreateShortcut.vbs
echo sLinkFile = "%HOMEDRIVE%%HOMEPATH%\Desktop\Hello.lnk" >> CreateShortcut.vbs
echo Set oLink = oWS.CreateShortcut(sLinkFile) >> CreateShortcut.vbs
echo oLink.TargetPath = "C:\Windows\notepad.exe" >> CreateShortcut.vbs
echo oLink.Save >> CreateShortcut.vbs
cscript CreateShortcut.vbs
del CreateShortcut.vbs

上記のスクリプトを実行すると、デスクトップに新しいショートカットが作成されます。
結果のショートカット

匿名の投稿者からのより完全なスニペットを次に示します(マイナーな修正で更新されます):

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET LinkName=Hello
SET Esc_LinkDest=%%HOMEDRIVE%%%%HOMEPATH%%\Desktop\!LinkName!.lnk
SET Esc_LinkTarget=%%SYSTEMROOT%%\notepad.exe
SET cSctVBS=CreateShortcut.vbs
SET LOG=".\%~N0_runtime.log"
((
  echo Set oWS = WScript.CreateObject^("WScript.Shell"^) 
  echo sLinkFile = oWS.ExpandEnvironmentStrings^("!Esc_LinkDest!"^)
  echo Set oLink = oWS.CreateShortcut^(sLinkFile^) 
  echo oLink.TargetPath = oWS.ExpandEnvironmentStrings^("!Esc_LinkTarget!"^)
  echo oLink.Save
)1>!cSctVBS!
cscript //nologo .\!cSctVBS!
DEL !cSctVBS! /f /q
)1>>!LOG! 2>>&1


これは、ファイルへのショートカットに最適です。ただし、変数Esc_LinkTargetにその親フォルダーを取得しようとする環境変数が含まれている場合、フォルダーへのショートカットに使用すると奇妙な問題が発生します。(%CD%\ ..のようなものは動作しませんが、%CD%は動作します)。ショートカットのターゲット・タイプではなく、「フォルダ」の「ファイル」なる
EDM

1
@Edmund興味深い問題。調べる時間はありませんが、末尾のスラッシュが違いを生む可能性があると思います。
デアホッホシュプラー

注意:あなたが使用している場合SET Esc_LinkTarget=%0、あなたは削除する必要があります"からecho oLink.TargetPath = oWS.ExpandEnvironmentStrings^(!Esc_LinkTarget!^)
ブラック

実行ごとにvbscriptを作成する代わりにWscript.Arguments、コマンドライン引数を取得するために使用した方がはるかに良かったでしょう... lol
Sancarn

22

powershellを使用した同様のソリューションを次に示します(おそらく、PSでバッチファイル全体を書き直すことができますが、Get It Done™のみを使用する場合は...)

set TARGET='D:\Temp'
set SHORTCUT='C:\Temp\test.lnk'
set PWS=powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile

%PWS% -Command "$ws = New-Object -ComObject WScript.Shell; $s = $ws.CreateShortcut(%SHORTCUT%); $S.TargetPath = %TARGET%; $S.Save()"

ファイルのPSへのパスを明示的に指定する必要があるかもしれませんが、機能するはずです。このオブジェクトを通じてマングルできる追加の属性もいくつかあります。

Name             MemberType Definition                             
----             ---------- ----------                             
Load             Method     void Load (string)                     
Save             Method     void Save ()                           
Arguments        Property   string Arguments () {get} {set}        
Description      Property   string Description () {get} {set}      
FullName         Property   string FullName () {get}               
Hotkey           Property   string Hotkey () {get} {set}           
IconLocation     Property   string IconLocation () {get} {set}     
RelativePath     Property   string RelativePath () {set}           
TargetPath       Property   string TargetPath () {get} {set}       
WindowStyle      Property   int WindowStyle () {get} {set}         
WorkingDirectory Property   string WorkingDirectory () {get} {set} 

Trix:これを行うためのより良い方法あると思われる場合は、新しい回答として投稿してください(適切な場合は、この回答にリンクします)。
スコット


10

mklinkコマンドを使用してはどうですか?C:\ Windows \ System32> mklinkシンボリックリンクを作成します。

MKLINK [[/ D] | [/ H] | [/ J]]リンクターゲット

    /D      Creates a directory symbolic link.  Default is a file
            symbolic link.
    /H      Creates a hard link instead of a symbolic link.
    /J      Creates a Directory Junction.
    Link    specifies the new symbolic link name.
    Target  specifies the path (relative or absolute) that the new link
            refers to.

10
良い考えですが、シンボリックリンクの動作はショートカットとは少し異なります。Visual Studioソリューションへのショートカットを作成すると、すべての相対パスプロジェクトが正しく開きます。ただし、シンボリックリンクを介して同じソリューションを開いた場合、作業ディレクトリは、シンボリックリンクが参照するパスではなく、シンボリックリンクが存在するパスの作業ディレクトリになります。
ウォルタースタボス14

7

ここで行ったすべての議論の後、これが私の推奨される解決策です。ダウンロード:http : //optimumx.com/download/Shortcut.zipを デスクトップに展開します(たとえば)。次に、scrum.pdfというファイル(デスクトップ上にもあります)のショートカットを作成するとします。1。CMDを
開き、デスクトップフォルダーに移動します
2.実行します:Shortcut.exe /f:"%USERPROFILE%\Desktop\sc.lnk" /a:c /t:%USERPROFILE%\Desktop\scrum.pdf

デスクトップにsc.lnkというショートカットが作成され、元のファイル(scrum.pdf)を指すようになります。


それは近道ではありません。指定されたプログラムを呼び出すのは単なるバッチファイルです。
キーストンプソン

1
ショートカットはWindowsから実行するものです。なぜなら、彼はタイトルにCMDを使用し、「コマンドライン」というタグを付けているからです。バッチファイルは、CMD(dos like)envで実行する場合のWindowsの「ショートカット」に相当します。
アルファシン

2
彼は質問の本文に「ショートカット(.lnkファイル)」を入れたので、実際のショートカットを作成したいと思いました。
キーストンプソン

1
わかりやすくするために申し訳ありません私は、exeファイルへのショートカットになりCMDで作られた私のデスクトップ上のアイコン持っていると思った
シャンタヌ

私はついに理解したので(遅い思想家-あなたは何ができますか...)私は私の答えを変えました。それが役に立てば幸い!
アルファシン

0

この無料プログラムには、http://www.nirsoft.net/utils/nircmd2.htmlの機能が必要です:(前述のWebページのサンプル) "Create a shortcut to Windows calculator under Start Menu->Programs->Calculators nircmd.exe shortcut "f:\winnt\system32\calc.exe" "~$folder.programs$\Calculators" "Windows Calculator"

私が試してみるサンプル:nircmd.exeショートカット "c:\ windows \ system32 \ calc.exe" "〜$ folder.desktop $" "Windows Calculator"


0

私はこのトピックが古いことを知っていますが、私のために働いた簡単な解決策を提供したかったです。

最初に.icoファイルをC:ドライブにコピーしました。次に、デスクトップにショートカットを作成し、C:ドライブのicoファイルにアイコンを設定しました。次に、.icoとショートカットの両方を、ユーザーがアクセスできるネットワーク共有にコピーしました。そこで、次のバッチファイルを作成して、icoと.urlをユーザーのWindows 7デスクトップにコピーしました。これにより、すべてのユーザーのデスクトップにショートカットが作成され、ショートカットの作成時に設定したアイコンファイルが保持されます。これが誰かの助けになることを願っています。

@echo off
Copy "\\sharename\folder\icon.ico" "C:\"
pause
copy "\\sharename\folder\shortcut.url" "C:\Users\All Users\Desktop"
pause

これが取るべきアプローチである場合、アイコンを埋め込む実際のショートカット(.lnk)を作成することをお勧めします。そのショートカットはどこにでもコピーできます。
LPChip
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.