2011-02-25 33 views
0

我正在從.properties文件讀取屬性(如下所示:applocation = c:\ x \ y \ z)。 使用行:FOR /F "eol=; tokens=2,2 delims==" %%i IN ('findstr /i "applocation" %1') DO set name=%%ibat文件:變量有錯誤的值,直到下次執行bat?

%1是作爲參數傳遞的.property文件的位置。

設置屬性後,我做的事:

呼應%applocation%

但是我第一次執行它相呼應,從我執行的批處理文件的位置bat文件。只有在同一個控制檯窗口再次執行bat文件後,才能獲得正確的值。

這非常令人厭惡,特別是因爲如果我關閉了命令窗口,我必須重新執行此操作。

回答

3

您在if或其他for那裏,我想,像這樣的一個塊很可能:

if foo (
    FOR /F "eol=; tokens=2,2 delims==" %%i IN ('findstr /i "applocation" %1') DO set name=%%i 
    echo %applocation% 
) 

這可不行,因爲當解析這樣的環境變量擴展阻止,而不是在運行時。

要使用延遲擴展把

​​

在您的批處理文件的頂部,然後用

if foo (
    FOR /F "eol=; tokens=2,2 delims==" %%i IN ('findstr /i "applocation" %1') DO set name=%%i 
    echo !applocation! 
) 
+0

謝謝,這似乎是個竅門。唯一缺少的是終點。 – Jack 2011-02-25 10:24:58

+0

@Jack,'endlocal'暗示在批處理文件的末尾。請記住'setlocal'也設置了一個本地環境。對環境變量所做的任何更改都不會在'endlocal'之後持續存在,這可能不是您想要的。 – Joey 2011-02-25 10:36:37

1

不起作用。見Delayed Variable Expansion

+0

它有一個期待,但:@echo關閉 SETLOCAL ENABLEDELAYEDEXPANSION FOR/F 「eol =; tokens = 2,2 delims ==」%% i IN('findstr/i「applocation」%1')DO set applocation =!applocation!%% i ENDLOCAL永遠不會輸出ything? – Jack 2011-02-25 10:05:22

+0

您應該使用'echo!applocation!' – adarshr 2011-02-25 10:07:17