2014-02-28 34 views
0

爲什麼是它下面給出的輸出我想到:Windows批處理文件:定義內從一個文件變量循環

@echo off 

echo foobar > tmp.txt 

SET /P a= < tmp.txt 
echo %a% 

FOR /F %%Q IN (tmp.txt) do set b=%%Q 
echo %b% 

foobar foobar

雖然下面的做沒有:

@echo off 
FOR /L %%n in (1,1,1) DO (
    echo foobar > tmp.txt 

    SET /P a= < tmp.txt 
    echo %a% 

    FOR /F %%Q IN (tmp.txt) do set b=%%Q 
    echo %b% 
) 

ECHO is off. 
ECHO is off. 

一切我能找到給出了怎麼辦loop環境以外的東西方向。


回答指導大衛Ruhmann

@echo off 
setlocal ENABLEDELAYEDEXPANSION 

FOR /L %%n in (1,1,1) DO (
    echo foobar > tmp.txt 

    SET /P a= < tmp.txt 
    echo !a! 

    FOR /F %%Q IN (tmp.txt) do set b=%%Q 
    echo !b! 
) 
+2

您需要爲變量使用**延遲擴展**。請參閱['setlocal/?'](http://ss64.com/nt/setlocal.html)和[EnableDelayedExpansion](http://ss64.com/nt/delayedexpansion.html)。或[搜索StackOverflow](http://stackoverflow.com/search?q=%5Bbatch-file%5D+delayed+expansion) –

+0

謝謝!我沒有足夠的聲望來填寫下面的答案,但是你給了我所需要的一切。 – ramzikai

回答

0

的「ECHO處於關閉狀態」的響應表明,回聲沒「看到」任何命令行條目。

在failling例如,不使用第一FOR循環所產生的來自「N」 %% n和,和你確定在(1,1,1)實際運行通過循環一次?

- 後編輯 -

所以「ECHO處於關閉狀態」,足以證明它確實運行循環一次。所以我沒有看到代碼的特定缺陷。這使我鍛鍊我的谷歌福:

http://www.robvanderwoude.com/variableexpansion.php

希望有所幫助。

+0

我沒有使用'%% n',因爲我試圖簡化示例。在我的實際腳本中,我使用'%% n'來運行更新'tmp.txt'內容的腳本,然後我需要讀入我的批處理文件。 – ramzikai

+0

另外,感謝您關於正確格式的提示。 :) – ramzikai

相關問題