2016-09-27 87 views
0

我正嘗試創建一個批處理腳本來將文件的快捷方式發送到我的開始菜單,但遇到了設置「開始」選項時遇到問題。我使用Shortcut from Optimum X來做到這一點,這可能是他們十年前的程序錯誤,而不是我的代碼。批量%〜f1可以工作,但%〜dp1由於空格而失敗

  • %~f1 = C:\Program Files (x86)\Example\Example.exe
  • %~dp1 = C:\Program Files (x86)\Example\

運行

shortcut /f:"%targetfolder%\%fileName%.lnk" /w:"%~f1" /a:c /t:%1 

按預期工作,並與 「起始位置」 設置爲文件的目錄創建一個快捷方式。當它遇到一個空間,例如,如果路徑中的程序文​​件的錯誤是

「參數‘文件’是無效的

命令的語法,但運行

shortcut /f:"%targetfolder%\%fileName%.lnk" /w:"%~dp1" /a:c /t:%1 

失敗不正確」

The Error.

很抱歉,如果這是不夠的信息,我知道的很少批次。

回答

1

你的問題不是空格,而是如何處理標準參數。

就你而言,你不是將數據傳遞給內部命令,而是傳遞給將使用其自己的解析器(default C startup code)的外部可執行文件。在這個解析器中,後跟一個引號的反斜槓是一個不會結束參數的轉義引號。

當你的%~dp1用反斜槓結束,逃離了報價,因此,其論證的/t開關Program後繼續進行,直到第一個不帶引號的空間,你的情況。因此,Files(在/t交換機中)不被識別爲有效參數。

通常的做法是用的東西去掉結尾反斜線,像

for %%a in ("%~dp1.") do (
    shortcut /f:"%targetfolder%\%fileName%.lnk" /w:"%%~fa" /a:c /t:"%~1" 
) 

這裏for命令用於處理文件路徑與添加點。這就是爲什麼當我們檢索引用元素的完整路徑(%%~fa)時,不會包含結束的反斜槓。

但是,如果目標文件夾是驅動器的根目錄,則此方法不起作用。結尾反斜槓不能被刪除。因此,另一種方法是通過簡單地轉義反斜線

shortcut /f:"%targetfolder%\%fileName%.lnk" /w:"%~dp1\" /a:c /t:"%~f1" 

現在報價是由兩個反斜線將被看作是一個逃脫反斜線後跟爭論的結束引號之前避免報價景觀。

+0

我使用第二種方法來保持簡單,並且工作完美。我不認爲我會想到這是一種逃避。非常感謝你! – TeeJay

相關問題