【.cmd】 バッチファイルスクリプト %15 【.bat】 (760レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
8: デフォルトの名無しさん [] 2022/09/26(月) 00:46:39.21 ID:ou4YDIZU(1/3) AAS
>>7
7(1): デフォルトの名無しさん [sage] 2022/09/26(月) 00:15:07.76 ID:7oxCYWvG(1/2) AAS
if とか for のブロックの中?
外部リンク:otnx.jp
御明察です!理由が分かって安心しました。ありがとうございます。

forループの中で、このような処理を書くことはできないのでしょうか。毎回ランダムで少し変えて実行する、という処理を書きたいのですが…
10
(1): デフォルトの名無しさん [] 2022/09/26(月) 01:47:37.41 ID:ou4YDIZU(2/3) AAS
>>9
9(1): デフォルトの名無しさん [sage] 2022/09/26(月) 01:01:52.99 ID:3mhNpNjH(1/2) AAS
for文の展開で解釈が一回多く入るから1回目の解釈後も環境変数として残すようにする
%%hoge%% → %hoge% → 環境変数hogeの中身に置換

上の方法はトリッキーなので正規には遅延環境変数展開を使う(setlocal /?)
setlocal EnableDelayedExpansion
ありがとうございます!できました!

setlocal enabledelayedexpansion
forループの初め

set /a hoge1=%random%
set /a hoge2=%random%
set /a hoge3=!hoge1!+!hoge2!

echo !hoge3!
forループの終わり

という風にしたら、動きました。
デフォルトではforループ全体が一気に読み込まれるので、変数への代入が実行される前に変数の内容が確定してしまうという仕様なんですね。それを回避するために、!を付けて展開遅延変数を用いる、ということですね。

ただ、ランダムにしたはずなのに、毎回同じ値が表示されますね…
何故…
17: デフォルトの名無しさん [] 2022/09/26(月) 21:36:40.64 ID:ou4YDIZU(3/3) AAS
>>11
11(1): デフォルトの名無しさん [sage] 2022/09/26(月) 01:54:43.87 ID:yGyQXERn(1) AAS
%random%
じゃなくて
!random!
>>14
14(1): デフォルトの名無しさん [sage] 2022/09/26(月) 11:49:53.74 ID:7oxCYWvG(2/2) AAS
>>10
set /a hoge1=!random!, hoge2=!random!, hoge3=hoge1+hoge2

set /a は , 区切りで複数の式を指定可
環境変数は展開せずとも計算可能。その場合存在しない変数名は0として扱われ、展開した場合(多くはエラーになる)とは違ってくるので意図した計算になっていない事に気付き難い事に注意が必要
random などの特殊環境変数は環境変数としては存在せず、展開時に代入されるので展開が必要

setlocal enabledelayedexpansion
for /L %%i in (1,1,4) do (
set /a a=!random!, b=!random!, c=a+b
echo !c!
)
pause

こんな風にも書ける
set /a c=(a=!random!)+(b=!random!)
echo !a! + !b! = !c!

「遅延環境変数」という名称はそういう変数が別にあるのかと紛らわしくて良く無いと思うわ
環境変数
特殊変数
標準展開、事前展開、%展開 (展開されてから構文解析)
遅延展開、!展開 (構文解析されてからコマンド実行直前に展開)
用いるなら「環境変数の遅延展開」だろう

ありがとうございます。
うまく動きました!
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.047s