BAT文件:FOR %% x变量不正确的扩展

时间:2012-01-26 09:36:18

标签: batch-file for-loop cmd

我有以下代码的bat脚本:

FOR /F "tokens=1,2 delims==" %%g in ("%CFGFILE%") do (
  SET firstChar=%%g
  SET firstChar=!firstChar:~1,1!
  if /I "!firstChar!"=="#" (
    echo %%g>>"%INSTALL_PATH%\tmp.cfg"
  )else (
    if /I "%%g"=="document.folder" (
      SET path_written=TRUE
      echo %%g=%DOC_FOLDER%>>"%INSTALL_PATH%\tmp.cfg"
    )else (
      rem next line is buggy
      echo %%g=%%h>>"%INSTALL_PATH%\tmp.cfg"
    )
  )
)

重点在于解析cfg-file%CFGFILE%内容并复制每个字符串而不更改新的config-file,只有一个字符串以" document.folder"开头。必须更改此行。问题是"下一行之后的行是错误的"评论给出" c:\ program files \ myApp \ original.cfg ="这是%CFGFILE%变量加上等号的内容。这是一个错误还是我做错了什么?这是否与%% x变量可见性相关?

2 个答案:

答案 0 :(得分:2)

您错误地确定了问题的根源! : - )

您的问题出在第一行 - 您的FOR语句正在处理字符串,而不是文件,因为IN()子句用双引号括起来。如果您希望将IN()子句视为带引号的文件名,则需要将USEBACKQ添加到FOR选项中。

FOR /F "usebackq tokens=1,2 delims==" %%g in ("%CFGFILE%") do (

只是抬头 - 即使在上述修复之后,如果出现以下任何一种情况,您的代码也无法提供正确的结果

  • 如果任何行包含!,则%% g或%% h的扩展将被破坏,因为已启用延迟展开

  • 如果原始包含=

  • ,则评论#行将不完整
  • 如果原件中有第二个=

  • ,您的法线将无法完成

答案 1 :(得分:0)

我的建议:

使用FART ...... http://sourceforge.net/projects/fart-it/