2017-04-26 109 views
1

我正在嘗試編寫一個批處理文件,該文件讀取包含特定行的文本文件,並將其作爲變量傳遞。這裏是我的代碼:批處理文件使用系統變量從文本文件中讀取

SetLocal EnableDelayedExpansion 

for /f "delims== tokens=1,2" %%G in (c:\temp\fred.txt) do (

if "%%G"=="FRED" (set %%G=%%H) 

) 

set FRED=%FRED% 

echo %FRED% 

set FRED=%USERNAME% 

echo %FRED% 

pause 

的FRED.txt的內容是:

ERIC=PATATE 
FRED=%USERNAME% 

當我運行此我得到:

C:\TEMP>SetLocal EnableDelayedExpansion 

C:\TEMP>for /F "delims== tokens=1,2" %G in (c:\temp\fred.txt) do (if "%G" == 
"FRED" (set %G=%H)) 

C:\TEMP>(if "ERIC" == "FRED" (set ERIC=PATATE)) 

C:\TEMP>(if "FRED" == "FRED" (set FRED=%USERNAME%)) 

C:\TEMP>set FRED=%USERNAME% 

C:\TEMP>echo %USERNAME% 
%USERNAME% 

C:\TEMP>set FRED=fred 

C:\TEMP>echo fred 
fred 

C:\TEMP>pause 
Press any key to continue . . . 

所以,當我做我的for循環我得到%USERNAME%而不是像常規集FRED =%USERNAME%應該給我的fred。誰能幫我?

+0

你的結果是我所期望的。請明確您的期望並告訴我們「用戶名」是什麼。 – Magoo

回答

0

您需要另一級解析來評估%username% - 正如您所做的那樣,它只是從文件中讀取文字字符串%username%。你可以做到這一點,例如一個call

SetLocal EnableDelayedExpansion 
for /f "delims== tokens=1,2" %%G in (t.txt) do (
    if "%%G"=="FRED" (call set %%G=%%H) 
) 
set FRED=%FRED% 
echo %FRED% 
set FRED=%USERNAME% 
echo %FRED% 
pause 
+0

完美謝謝。 – Ne0x222

相關問題