私は、アクションが既に実行されているかどうかを確認できるスクリプトを作成しています。私は0で2x2の配列で始めました。私は4つの要素の中に3つの1をランダムに格納したいとし、要素がすでに1を格納している場合は、echoを繰り返してユーザーに通知します。これは私がこれまで持っているコードであり、エコーはしません同じ要素が複数回選択されても繰り返します。for-loop内のif文が動作しない
@echo off
setlocal EnableDelayedExpansion
::::::::::::::::::::::::::::::::::::::::::::Creating a 2x2 zero array
for /l %%y in (0,1,1) do (
for /l %%x in (0,1,1) do (
set map[%%x][%%y]=0
)
)
::::::::::::::::::::::::::::::::::::::::::::Putting 1s in elements randomly
for /l %%x in (1,1,3) do (
set /a j=!Random!%%2
set /a i=!Random!%%2
if !map[%i%][%j%]! EQU 0 (set map[!i!][!j!]=1) else (echo Repeated)
)
::::::::::::::::::::::::::::::::::::::::::::Result
echo !map[0][0]!!map[1][0]!
echo !map[0][1]!!map[1][1]!
echo.
pause
私はオンライン関連の何かを読んで、それが「SETLOCAL EnableDelayedExpansion」こととは何かを持っていますが、私はそれを行う方法がわからないかなり確信しています。前もって感謝します。 「ブロックががを起動したときvar
の値を」%var%
の意味 - あなたのコード、%i%
と%j%
で
!for [%% i] [%% j]!なら、for/Fを使うことができますtokens = 1,2 "%% i in("!i!!j! ") EQU 0(セットマップ[%% i] [%% j] = 1)else ... '。このタイプの管理については、[この記事](https://stackoverflow.com/questions/10166386/arrays-linked-lists-and-other-data-structures-in-cmd-exe-batch-script/10167990)に詳しく説明されています。 #10167990) – Aacini
あなたの疑問をお寄せいただきありがとうございますが、 "for/F"トークン= 1,2 "%% i("!i!!j! ")do"の意味を説明できますか?私はまだバッチを初めて使う人です。私はちょうどあなたのコードを試してみましたが、それは何回繰り返されたのかを示していませんでした – jacknip
コマンドプロンプトで 'for /?'とタイプしてヘルプ画面を読んだり、 'for'コマンドに関する多くの記述[this](https://ss64.com/nt/for_f.html)や[this](https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs)のようにWebに存在します。 /en-us/ntcmds_shelloverview.mspx?mfr=true)、etc ...この場合、 '!i!'と '!j!'の値を '%% i'と' %% j 'に代入します、 '!map [%% i] [%% j]! 'は正しく使用できました。 – Aacini