2016-07-31 136 views
1

我正在關注本教程中關於windows腳本數組和for循環。這些例子不工作,在Windows 7和10windows批處理腳本循環變量擴展不起作用

Batch script tutorial

當我運行循環以下測試:

:: @echo off 
set list = 1 2 3 4 
(for %%a in (%list%) do ( 
    echo %%a 
)) 

我得到以下輸出:

set list = 1 2 3 4 
(for %a in ((null)) do (echo %a )) 

列表varialble的內容不會打印在for循環中。我期待得到

1 
2 
3 
4 

任何想法?

+0

您的變量被命名爲'list '。將'%list%'更改爲'%list%' – 2016-07-31 06:35:07

+4

甚至更​​好:擺脫'='周圍的空格。它們分別成爲可變名稱的一部分。 – Stephan

+0

謝謝,我知道它一定很簡單。這在教程示例中也是錯誤的。 – Pohl7534

回答

2

有關使用基本批處理命令(如SET)的信息,請參閱SS64偉大的信息源。就你的情況而言,正如上面所評論的那樣,擴展變量名%list%必須包含空格(如果存在於其定義中)。如果變量定義中不需要該空間,只需在SET語句中刪除它即可。

數組變量之間的空格值列表不代表任何問題,並且在許多示例應用程序中可以非常方便,特別是FOR循環,因爲它們允許令牌用於查找正確的值。這個例子的工作原理:

@echo off 
set "list= 1 2 3 4" 
for %%a in (%list%) do ( 
    echo %%a 
) 

供學習使用批處理腳本陣列,讀Aacini的答案:

使用「陣列」之三一些專家對這些批評意見進行了辯論。例如dbenham的回答在DIR output into BAT array?

+0

您解決了代碼中的問題,但未解釋問題所在,也未解決問題。你的答案的其餘部分掩蓋了這個問題。 – dbenham

+0

謝謝。增加了口頭解釋,儘管從腳本中可以看出,在很多情況下,這是「以身作則」的最好和充分的解釋。對不起,如果我錯過了您對Array主題的任何貢獻,請在此處或在答案中添加相關鏈接。 :) – sambul35

+0

@ Pohl7534如果腳本適用於您,請考慮通過單擊答案左側的「向上箭頭」和「選擇」符號來選擇並接受本主題中的任何答案。 :) – sambul35