我在 Github 上找到了一個 GUI 應用程式,我用它來存盤要運行的命令列。作者正在使用以下語法來獲取我輸入的內容并在 cmd 視窗中使用它 -
我進入他的表格——
set "test=four"
echo %test%
pause
他將它轉換為這個,它無法顯示變數的內容 -
"C:\Windows\System32\cmd.exe" /Kset "test=four"&&echo %test%&&pause
結果是 %test%,而不是 test 變數的內容,即 4。
如果我自己在 cmd 視窗中運行他的命令列,它也無法獲取 var 內容并顯示 %test%。
那么為什么這不起作用,我建議他將我輸入的內容復制到他的表單中,然后粘貼到他生成的 cmd 視窗中并運行它。可以輕松編碼嗎?這是最簡單的解決方法嗎?
uj5u.com熱心網友回復:
TL;DR:使用cmd /v:on /k (set "test=four" ^& echo !test! ^& pause)
讀取Windows 命令解釋器 (CMD.EXE) 如何決議腳本?有關正在發生的事情的更多資訊。
我想先說將命令鏈接在同一行上總是一個壞主意。出于某種原因,您可以在多行上運行命令,您應該利用這一點;它使事情更容易閱讀,并使腳本表現得更好。
也就是說,有一種方法可以做到這一點,但是您的代碼有多種因素使其無法正常作業。
首先,&&僅在第一個命令成功時才運行第二個命令。兩者都cmd不會echo失敗,所以你只需要&在這里。echo %test%與您的其余代碼分開運行,因為解釋器讀取您的代碼的方式,它認為您只想運行"C:\Windows\System32\cmd.exe" /Kset "test=four",然后在echo %test%成功回傳后運行。為了在同一個 cmd 實體中運行所有三個命令,您需要使用括號,以便將所有內容都視為單個命令。
此外,為了告訴解釋器&在新實體運行之前不用于鏈接命令cmd,您需要使用^.
最后,因為您試圖在同一行上設定和使用變數,所以解釋器%test%會在值有機會設定之前第一次讀入時嘗試用它的值替換。為了解決這個問題,您需要通過使用/V:on標志啟用延遲擴展,然后使用!test!,以便變數在執行時間之前不會被擴展。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/468378.html
上一篇:一元運算子“-”后缺少運算式
