我不確定為什麼從提示符運行此命令不起作用,setlocal 只能從批次檔中呼叫嗎?
setlocal EnableDelayedExpansion & for /l %i in (1,1,3) do (set text=%i & echo Hello !text!)
預期結果是:
你好1
你好2
你好3
更新: 我使用的是 Windows 8.1
答案1
問題就是答案。很明顯,您cmd
在 Windows NT 中使用了 Microsoft 的命令解釋器;並且在該命令解釋器setlocal
在使用命令腳本呼叫時確實沒有任何效果。
其他命令解釋器的不同之處在於,它的setlocal
作用是什麼、它是否可以透過命令腳本呼叫、它是否嵌套以及它是否控制您試圖控制的事物。
原來setlocal
,在微軟的cmd
OS/2版本1中,只是保存了目前的磁碟機、目錄和環境;在命令腳本之外沒有效果;並且沒有築巢。正如您所看到的,在過去的四分之一世紀中,該命令已經向不同的方向擴展。
這裡差異的一個原因是 JP Software 的 TCC 在複合命令中逐步執行變數擴展,並且不需要延遲變數擴展技巧來完成您想要做的事情。這:
for /l %i in (1,1,3) do (set text=%i & echo Hello %text%)....列印您想要列印的內容。
進一步閱讀
答案2
答案其實相當簡單!
for /l %i in (1,1,3) do (call set text=%i & echo Hello %text%)