0

変数名を変更可能にする必要がある作業中のバッチファイルがあります。これが意味することは、すべてに 1 または 0 に設定され、変数の 1 つが 2 に設定されているという名前の変数のリストがあるという%X0Y0U%ことです (これは必要に応じて変更できます)。%X9Y9U%バッチファイルの後半でこれを行います:

set TEMPLOC=X%Xcoord%Y%Ycoord%U
if %TEMPLOC% EQU 1 (
     random code
) ELSE if %TEMPLOC% EQU 0 (
     random code
) ELSE if %TEMPLOC% EQU 2 (
     random code
)

次に、バッチファイルには、既に機能していることがわかっている部分があります。私が知る必要がある%TEMPLOC%のは、変数の値を等しくする方法です%X#Y#U%。との#'s間の数字を表す は、両方の で常に同じとは限りません。要するに、スペースを除いて、これを実行できるようにしたいと思います(これは非常に文字通りのバージョンです) 。私が述べたことは不可能であることを知っています. どうすればいいのかとても困っているので教えてください。09#'s%X %Xcoord% Y %Ycoord% U%%X% Xcoord %Y% Ycoord %U%

理解できない場合、またはコードをさらに追加する必要がある場合は、コメントでその旨をお知らせください。

4

2 に答える 2

1

これには遅延展開を使用できます。このように、行は 2 段階で解析および展開されます。最初の展開はパーセント記号で囲まれた変数に対して機能し、2 番目の展開は感嘆符で囲まれた変数に対して機能します (遅延展開が有効になっている限り)。例えば:

setlocal EnableDelayedExpansion
set Xcoord=3
set Ycoord=6
set TEMPLOC=!X%Xcoord%Y%Ycoord%U!

編集2番目の方法が追加されました

X%Xcoord%Y%Ycoord%U 変数の値が数値の場合、次のSET /Aコマンドを使用して遅延拡張なしで同じことを行うこともできます。

set /A TEMPLOC=X%Xcoord%Y%Ycoord%U
于 2013-09-23T20:50:15.893 に答える
0

Aacini が投稿したいずれかの方法を使用することを強くお勧めします。しかし、拡張を遅らせずにそれを行う別の(はるかに遅い)方法は次のとおりです。

call set TEMPLOC=%%X%Xcoord%Y%Ycoord%%%

CALL は、2 つの通常の拡張フェーズを作成します。

Xcoord と Ycoord の両方が 1 の場合、最初の展開段階で:

%Xcoord%  --> 1
%Ycoord%  --> 1
%%        --> %

降伏:

%X1Y1%

次に、2 番目の CALL 拡張フェーズで目的の値が取得されます。

多くの CALL ステートメントを連結して、外側のパーセントを毎回 2 倍にすることができます。

しかし、繰り返しになりますが、まれな状況を除いて、この方法を使用するのは好きではありません。

于 2013-09-23T22:14:46.360 に答える