我有以下代码的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变量可见性相关?
答案 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/