2013-07-15 86 views
3

我已經通過HKCR \ Drive \ shell \ MapLocalDriveHere \命令中的註冊表向我的上下文菜單中添加了一條命令,以便當我右鍵單擊某個驅動器時。我希望它給我一個我右鍵單擊爲「C:」而不是「C:\」的驅動器的名稱,因爲這會導致我嘗試運行的命令出現問題。刪除末尾 in subst命令

cmd /c subst %1 /D 

這將擴展爲:

cmd /c subst C:\ /D 

和命令失敗(預計subst C: /D)。如何獲得沒有尾隨的參數\,或刪除它? %~d1%~1不會從註冊表項中展開,請鍵入REG_EXPAND_SZ。

您可以更好地理解什麼,我試圖通過查看項目的源,位於https://github.com/Ehryk/ContextMenuTools(尤其是這個文件:https://github.com/Ehryk/ContextMenuTools/blob/master/Custom%20Installs/Map%20Local%20Drive%20Here/MapLocalDriveHere.inf)做

回答

0

出於某種原因,我不得不切換到%V,而不是%1在註冊表中解決此問題:

cmd /c mapdrive.bat ""%V"" /D 

HKCR,Drive\Shell\MapLocalDriveHere\command,,0x00020000,"cmd /c mapdrive.bat ""%V"" /D" 
2
set "param=%~1" 
set "param=%param:~0,-1%" 
cmd /c subst %param% /D 
+0

我會添加一個檢查'如果「%參數:〜-1%」==「\」'是安全的。 –

+0

我不認爲我可以在註冊表項中執行多行。也許我需要調用一個.bat文件來完成這個任務,而不是試圖用一個班輪執行它。 – Ehryk

+0

您可以將新行添加到註冊表項中。您需要在二進制模式下對其進行編輯,並將十六進制值設置爲新行 - 「0d 0a' – npocmaka

5

您在for /f環與%%~d參數得到帶冒號的驅動器號:

FOR /f "delims=" %%a IN ("%~1") DO cmd /c subst %%~da /D 
+2

甚至可以用plain來完成:for for% %d in(「%〜1」)do cmd/c subst %%〜da/D' – npocmaka

+0

'%〜1'不會從註冊表項中擴展。這位於HKCR \ Drive \ shell \ MapLocalDriveHere \ command中的註冊表項中,鍵入:REG_EXPAND_SZ – Ehryk

+0

如果您提出問題,請提供所有相關數據。在Regkey中,您可以使用不帶雙引號的'%1'。 – captcha

3

好吧...讓我們結合captcha和npocmaka的答案的最佳功能。有沒有必要爲一箇中間變量,也沒有必要爲for語句:

cmd /c subst %~d1 /D 
+0

是啊......現在我覺得自己像個白癡:-D – npocmaka

+0

'%〜d1'不會擴大,也不會'%〜1'。到目前爲止,只有'%1'變成了'{Drive}:'。這位於HKCR \ Drive \ shell \ MapLocalDriveHere \命令的註冊表項中,類型:REG_EXPAND_SZ – Ehryk