2015-05-04 115 views
25

我想我的.bat腳本(test.bat)創建一個自己的快捷方式,以便我可以將它複製到我的Windows 8啓動文件夾。如何在Windows中通過命令行創建快捷方式?

我寫了這行代碼來複制文件,但我還沒有找到創建所述快捷方式的方法,因爲您可以看到它只複製腳本。

xcopy "C:\Users\Gabriel\Desktop\test.bat" "C:\Users\Gabriel\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup" 

你能幫我嗎?

+0

http://superuser.com/a/455398/48092 – Aivar

回答

24

您可以使用PowerShell命令。在你的批處理腳本堅持這一點,它會在%userprofile%\Start Menu\Programs\Startup創建一個快捷方式%~f0

powershell "$s=(New-Object -COM WScript.Shell).CreateShortcut('%userprofile%\Start Menu\Programs\Startup\%~n0.lnk');$s.TargetPath='%~f0';$s.Save()" 

如果你不喜歡使用PowerShell,你可以使用mklink做一個符號鏈接。語法:

mklink saveShortcutAs targetOfShortcut 

mklink /?在完整的語法控制檯窗口,並this web page瞭解更多信息。

在你的批處理腳本,這樣做:

mklink "%userprofile%\Start Menu\Programs\Startup\%~nx0" "%~f0" 

創建的快捷方式不是傳統的.lnk文件,但它應該工作一樣不過。請注意,如果.bat文件是從啓動文件夾所在的同一個驅動器運行,那麼這隻會起作用。另外,顯然需要管理員權限才能創建符號鏈接。

+1

aah。+ 1。忘了mklink。雖然它支持Vista和更高版本(反正XP正在去墳場的路上),並沒有太多選項。 Powershell解決方案好得多:) – npocmaka

+2

是的,但如果尚未爲當前Windows會話啓動,PowerShell會導致暫停。您的shortcutJS.bat解決方案應該更快。 – rojo

+1

我認爲當前項目的mklink解決方案已經夠用了,我不認爲需要更好更復雜的命令。但是有一些我需要繞過:*管理員權限*。有沒有在mklink中配置用戶權限的選項? – Maslor

11

不能用純batch.Check要做的shortcutJS.bat - 這是一個jscript/bat混合,應.bat擴展使用:

call shortcutJS.bat -linkfile "%~n0.lnk" -target "%~f0" -linkarguments "some arguments" 

隨着-help你可以檢查其他選項(可以設置圖標,管理權限等)

+1

大,它的工作原理很好。我認爲這比mklink方法更好。我使用shortcutJs.bat爲.pyw文件創建快捷方式,其快捷方式與手動創建的快捷方式完全相同。但是當你雙擊mklink創建的鏈接時,它不能自動找到pythonw.exe來執行.pyw文件。 – lengxuehx

1

我提出了一個小型混合腳本[BAT/VBS]來創建桌面快捷方式。 你當然可以修改它以達到你的目的。

@echo off 
mode con cols=87 lines=5 & color 9B 
Title Shortcut Creator for your batch and applications files by Hackoo 2015 
Set MyFile=%~f0 
Set ShorcutName=HackooTest 
(
echo Call Shortcut("%MyFile%","%ShorcutName%"^) 
echo ^'**********************************************************************************************^) 
echo Sub Shortcut(ApplicationPath,Nom^) 
echo Dim objShell,DesktopPath,objShortCut,MyTab 
echo Set objShell = CreateObject("WScript.Shell"^) 
echo MyTab = Split(ApplicationPath,"\"^) 
echo If Nom = "" Then 
echo Nom = MyTab(UBound(MyTab^)^) 
echo End if 
echo DesktopPath = objShell.SpecialFolders("Desktop"^) 
echo Set objShortCut = objShell.CreateShortcut(DesktopPath ^& "\" ^& Nom ^& ".lnk"^) 
echo objShortCut.TargetPath = Dblquote(ApplicationPath^) 
echo ObjShortCut.IconLocation = "Winver.exe,0" 
echo objShortCut.Save 
echo End Sub 
echo ^'********************************************************************************************** 
echo ^'Fonction pour ajouter les doubles quotes dans une variable 
echo Function DblQuote(Str^) 
echo DblQuote = Chr(34^) ^& Str ^& Chr(34^) 
echo End Function 
echo ^'********************************************************************************************** 
) > Shortcutme.vbs 
Start /Wait Shortcutme.vbs 
Del Shortcutme.vbs 
::***************************************Main Batch******************************************* 
cls 
echo Done and your main batch goes here ! 
echo i am a test 
Pause > Nul 
::******************************************************************************************** 
1

最好的方法是運行這個批處理文件。 打開記事本,輸入: -

@echo off 
echo Set oWS = WScript.CreateObject("WScript.Shell") > CreateShortcut.vbs 
echo sLinkFile = "GIVETHEPATHOFLINK.lnk" >> CreateShortcut.vbs 
echo Set oLink = oWS.CreateShortcut(sLinkFile) >> CreateShortcut.vbs 
echo oLink.TargetPath = "GIVETHEPATHOFTARGETFILEYOUWANTTHESHORTCUT" >> CreateShortcut.vbs 
echo oLink.Save >> CreateShortcut.vbs 
cscript CreateShortcut.vbs 
del CreateShortcut.vbs 

另存爲filename.bat(注意,同時節省選擇所有文件類型) 在Win XP中運行良好。

3

Rohit Sahu的答案在Windows 10中最適合我.PowerShell解決方案運行,但沒有出現任何捷徑。 JScript解決方案給了我語法錯誤。我沒有嘗試mklink,因爲我不想混淆權限。

我希望快捷方式出現在桌面上。 但我還需要設置圖標,描述和工作目錄。 請注意,MyApp48.bmp是一個48x48像素的圖像。 這裏是我的羅希特的解決方案的MOD:

@echo off 
cd c:\MyApp 
echo Set oWS = WScript.CreateObject("WScript.Shell") > CreateShortcut.vbs 
echo sLinkFile = "%userprofile%\Desktop\MyApp.lnk" >> CreateShortcut.vbs 
echo Set oLink = oWS.CreateShortcut(sLinkFile) >> CreateShortcut.vbs 
echo oLink.TargetPath = "C:\MyApp\MyApp.bat" >> CreateShortcut.vbs 
echo oLink.WorkingDirectory = "C:\MyApp" >> CreateShortcut.vbs 
echo oLink.Description = "My Application" >> CreateShortcut.vbs 
echo oLink.IconLocation = "C:\MyApp\MyApp48.bmp" >> CreateShortcut.vbs 
echo oLink.Save >> CreateShortcut.vbs 
cscript CreateShortcut.vbs 
del CreateShortcut.vbs 
+0

我想要一個非常簡單的問題的解決方案,我已經給了它。我試圖只使用BAT,而不是基本的視覺。 – Maslor

+1

但謝謝你的答案!可能會幫助其他人來到這裏尋找解決方案。 – Maslor

+0

我在用戶使用自定義桌面位置的終端服務器中獲取桌面路徑時出現問題。爲了解決這個問題,我必須從註冊表中讀取桌面位置。 '設置objShell =的CreateObject( 「WScript.Shell」) strRegDesktopPath = objShell.RegRead( 「HKEY_CURRENT_USER \軟件\微軟\的Windows \ CurrentVersion \ Explorer中\用戶Shell文件夾\桌面」) desktopPath = objShell.ExpandEnvironmentStrings(strRegDesktopPath) 設置oWS = WScript.CreateObject(「WScript.Shell」) sLinkFile = desktopPath&「\ MyApp.lnk」 –

2

link.vbs

set fs = CreateObject("Scripting.FileSystemObject") 
set ws = WScript.CreateObject("WScript.Shell") 
set arg = Wscript.Arguments 

linkFile = arg(0) 

set link = ws.CreateShortcut(linkFile) 
    link.TargetPath = fs.BuildPath(ws.CurrentDirectory, arg(1)) 
    link.Save 

命令

C:\dir>link.vbs ..\shortcut.txt.lnk target.txt 
相關問題