将文件中的行读入命令窗口并扩展变量

将文件中的行读入命令窗口并扩展变量

我正在尝试看看是否可以将文件中的行读入命令窗口,然后将它们写回到文件中。棘手的部分是,文件中任何有类似变量的文本的地方我都希望将其展开。

我的想法是有一个主批处理文件,我在其中设置变量,然后读取默认文件并用主文件中的值替换变量。

文件内容

################################################################################
#
# Response file
#
################################################################################

################################################################################
#
# License Acceptance
#
# If you accept the license, <value> should be "true".
#
LICENSE_ACCEPTED=true

################################################################################
#
# Server host name
#
# The server host name. Server name should be FQDN
#
SERVER_HOSTNAME=%SERVER_HOSTNAME%

################################################################################
#
# Install user name
#
INSTALL_USER_NAME=%INSTALL_USER_NAME%

################################################################################
#
# Create user or not
#
# true:  create new user
# false: do not create new user. use existing user
#
CREATE_USER=false

我对 INSTALL_USER_NAME 行的输出将是 INSTALL_USER_NAME=USER

问题是,当读入变量并将其回显到文件时,它们似乎没有被扩展。

更新:解决方案如下

SETLOCAL ENABLEDELAYEDEXPANSION
for /F "delims=" %%a in (E:\TEMP\WindowsAdditionalServer.properties) do (
call echo %%a>>"E:\TEMP\BASE.properties"
)

答案1

call可以作为一种 eval 语句使用。

尝试类似

SET INSTALL_USER_NAME=USER    
for /F "delims=" %%a in (E:\TEMP\WindowsAdditionalServer.properties) do (call echo %%a>>"E:\TEMP\BASE.properties")

(未经测试)

答案2

展开的顺序大致如下:

  1. 参数,例如%1%*
  2. 正常变量扩展,例如%var%
  3. FOR 变量,例如%%V
  4. 例如,扩张延迟!var!
  5. CALL 进行另一轮正常扩张

您可以在 FOR 变量扩展之后使用 CALL 技巧来扩展变量,但这相对较慢。最好使用延迟扩展。

当您启用延迟扩展时,您走在正确的轨道上,但您还需要在模板文件中替换。因此!应更改为。然后一切都会正常工作,并且速度会更快。%INSTALL_USER_NAME=%INSTALL_USER_NAME%INSTALL_USER_NAME=!INSTALL_USER_NAME!

相关内容