【问题标题】:Batch file Reading from a text file with system variable批处理文件从带有系统变量的文本文件中读取
【发布时间】:2017-04-26 23:40:04
【问题描述】:

我正在尝试编写一个批处理文件,该文件读取包含我想作为变量传递的特定行的文本文件。这是我的代码:

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。谁能帮帮我?

【问题讨论】:

  • 您的结果是我所期望的。请明确说明您的期望并告诉我们username 是什么。

标签: batch-file


【解决方案1】:

您需要另一个级别的解析来评估%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

【讨论】:

    猜你喜欢
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 2011-04-17
    • 2014-02-03
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    相关资源
    最近更新 更多