ifブロック内で行われた代入(すなわちset文)は、ifブロックの後まで実現されません。つまり、ifブロック内の変数代入に頼ることはできません。これを修正するには?ifブロック内で代入を実現する方法は?
1
A
答えて
2
IFブロックまたはFORブロックの割り当ては、すぐに実現されます。適切に実現されていないのは、変数値の維持がパーセント記号で囲まれていることです。行%を実行する前に%variable%の値がに置き換えられていることに注意する必要があります。たとえば、次のようになります。
set var=Old value
set var=New value & echo %var%
以前のコマンドでは、「古い値」と表示されます。この問題を解決する方法は、Delayed Expansionを使用する方法です。すなわち、%でなく感嘆符で変数を囲み、setlocal ...コマンドを最初に追加します。つまり、
setlocal EnableDelayedExpansion
set var=Old value
set var=New value & echo !var!
このように、!var!値はまで置き換えられます!echo!var!コマンドが実行され(遅延拡張)、前のセットコマンドが実行された後、前のコマンドは「新しい値」を表示します。
この同じダイカッションは、任意の変数(かっこ内)に適用されます。例えば:%のVaRの%値は、全体のIF(またはFOR)を実行する前に一度だけ展開されているので、
set var=Old value
if 1 == 1 (
set var=New value
echo %var%
)
...間違っています。あなたは使用する必要があります。
setlocal EnableDelayedExpansion
set var=Old value
if 1 == 1 (
set var=New value
echo !var!
)
タイプSETを/?詳細はを参照してください。
関連する問題
- 1. Ruby - IFブロック内で何かを実行してからブレークする方法は?
- 2. if文ブロックへの条件に基づいてifブロックとelseブロックの両方を実行する方法は?
- 3. If関数内に出現するIf文()If内に出現するIf文
- 4. if文をlftpブロックに入れる方法
- 5. PHP - ifステートメント内の代入範囲
- 6. シェフテンプレートファイル内のループ内にif文を入れる方法は?
- 7. スカラーのanyValの代わりにif-elseブロックからIntを返す方法は?
- 8. numpy配列内のブロックに値を代入する
- 9. ifブロックに続行する方法を追加するには
- 10. if文をif(condition&condition&if())の中に入れる方法は?
- 11. if-else条件内にシャイニーアクションのボタンコードを入れる方法は?
- 12. Cでif/elseブロックで何かをエスケープする方法#
- 13. PHPのifステートメント内のvarに代入する
- 14. 関数内で変数を正しく代入する方法
- 15. Nifi表現言語変数に値を代入する方法
- 16. リンクリストクラスで代入演算子を実装する方法
- 17. ループで年を代入する方法
- 18. csvデータ内のpython3.xで "sumif"を実現する方法
- 19. Pythonで内部結合を実現する方法
- 20. カーソルイテレータ内のarraylistアイテムに値を代入する方法
- 21. Javaのif-elseブロックでの等価比較の方法は?
- 22. Awk If-Elseif-Ifブロック
- 23. C++で代入演算子のオーバーロードを実装する方法は?
- 24. 多くのIfブロックを削除する方法
- 25. 代入文をif文に入れるのは悪い習慣ですか?
- 26. Swiftの異なるブロックでobjc_setAssociatedObjectを実装する方法は?
- 27. 入力バイトストリームでreadInt()ブロックを作成する方法は?
- 28. Pryでデバッグする際の内部Rails実現をスキップする方法は?
- 29. Ifブロックを制限する
- 30. elseブロックへのループの代替方法
なぜsetlocal EnableDelayedExpansionが必要ですか? DelayedExpansionはレジストリでデフォルトで有効になっていませんか? – user93200
デフォルトでは有効になっていませんが、レジストリで有効にすることができます。この主題の詳細については、 'CMD /?'をタイプしてください。 – Aacini