我正在尝试看看是否可以将文件中的行读入命令窗口,然后将它们写回到文件中。棘手的部分是,文件中任何有类似变量的文本的地方我都希望将其展开。
我的想法是有一个主批处理文件,我在其中设置变量,然后读取默认文件并用主文件中的值替换变量。
文件内容
################################################################################
#
# 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
或%*
- 正常变量扩展,例如
%var%
- FOR 变量,例如
%%V
- 例如,扩张延迟
!var!
- CALL 进行另一轮正常扩张
您可以在 FOR 变量扩展之后使用 CALL 技巧来扩展变量,但这相对较慢。最好使用延迟扩展。
当您启用延迟扩展时,您走在正确的轨道上,但您还需要在模板文件中替换。因此!
应更改为。然后一切都会正常工作,并且速度会更快。%
INSTALL_USER_NAME=%INSTALL_USER_NAME%
INSTALL_USER_NAME=!INSTALL_USER_NAME!