ファイルからコマンドウィンドウに行を読み込んでから、ファイルに書き戻すことができるかどうかを確認しようとしています。トリッキーな部分は、変数に似たテキストがあるファイルのどこかに、それを展開したいということです。
アイデアは、変数を設定してからデフォルトファイルを読み込み、変数をマスターからの値に置き換えるマスターバッチファイルを作成することです。
ファイルの内容
################################################################################
#
# 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"
)
call
は、一種のevalステートメントとして使用できます。
次のようなものを試してください
SET INSTALL_USER_NAME=USER
for /F "delims=" %%a in (E:\TEMP\WindowsAdditionalServer.properties) do (call echo %%a>>"E:\TEMP\BASE.properties")
(未テスト)
拡張の順序はおおまかに次のとおりです。
%1
、または%*
%var%
%%V
!var!
CALLトリックを使用して、FOR変数の展開後に変数を展開できますが、それは比較的低速です。遅延拡張を使用することをお勧めします。
遅延拡張を有効にしたときは正しい方向に進んでいましたが、テンプレートファイルの!
を%
に置き換える必要もあります。したがって、INSTALL_USER_NAME=%INSTALL_USER_NAME%
をINSTALL_USER_NAME=!INSTALL_USER_NAME!
に変更する必要があります。その後、すべてが機能し、より高速になります。