嘗試在 for 迴圈內的一行上設定局部變數

嘗試在 for 迴圈內的一行上設定局部變數

我不確定為什麼從提示符運行此命令不起作用,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,在微軟的cmdOS/2版本1中,只是保存了目前的磁碟機、目錄和環境;在命令腳本之外沒有效果;並且沒有築巢。正如您所看到的,在過去的四分之一世紀中,該命令已經向不同的方向擴展。

這裡差異的一個原因是 JP Software 的 TCC 在複合命令中逐步執行變數擴展,並且不需要延遲變數擴展技巧來完成您想要做的事情。這:

for /l %i in (1,1,3) do (set text=%i & echo Hello %text%)
....列印您想要列印的內容。

進一步閱讀

  • SETLOCALWindows XP 命令列參考 A-Z。 技術網。微軟公司。
  • SETLOCAL。接受命令/TCC 幫助。 JP軟體。
  • 喬納森·德博因·波拉德。 SETLOCAL。 32 位元命令解釋器命令參考。
  • SETLOCAL。 OS/2 Warp 指令參考。 IBM 公司。
  • J.埃米特·比姆 (1988)。圖解 OS/2。文字軟體出版。 ISBN 9781556220531。 40

答案2

答案其實相當簡單!

for /l %i in (1,1,3) do (call set text=%i & echo Hello %text%)

相關內容