バッチスクリプトでこのようなことをしたいです。これが適切な方法であるか、可能な方法であるか、または他の方法であるかを教えてください
set var1=A
set var2=B
set AB=hi
set newvar=%var1%%var2%
echo %newvar%
これにより、値「hi」が生成されます。
遅延変数展開を有効にすると問題が解決し、スクリプトは「hi」を生成します。
setlocal EnableDelayedExpansion
set var1=A
set var2=B
set AB=hi
set newvar=!%var1%%var2%!
echo %newvar%
setlocal
コマンドはsetlocal
で作成されているため、endlocal
コマンドにより、変数はsetlocal
を生き残れません。このようにして、変数は正しい方法で定義されます。
これを行うには、次のコードを使用します。
set var1=A
set var2=B
set AB=hi
call set newvar=%%%var1%%var2%%%
echo %newvar%
注:[〜#〜] must [〜#〜]変数を設定する前にcall
を使用しないと、機能しません。
方法は正しいですが、拡張セット構文を使用して少し改善できます。
set "var=xyz"
最後の引用符までコンテンツにvarを設定します。これにより、「非表示」スペースが追加されないことが保証されます。
あなたのコードは次のようになります
set "var1=A"
set "var2=B"
set "AB=hi"
set "newvar=%var1%%var2%"
echo %newvar% is the concat of var1 and var2
echo !%newvar%! is the indirect content of newvar