【发布时间】:2017-09-23 03:24:07
【问题描述】:
所以我正在编写一个脚本来判断一个动作是否已经被执行。我从一个包含 0 的 2x2 数组开始。我想在四个元素中随机存储三个 1,如果元素已经存储了 1,则 echo 重复以通知用户。这是我到目前为止的代码,即使多次选择相同的元素,它也不会回显重复。
@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”有关,但我不知道该怎么做。提前致谢。
【问题讨论】:
-
您可以使用
for /F "tokens=1,2" %%i in ("!i! !j!") do if !map[%%i][%%j]! EQU 0 (set map[%%i][%%j]=1) else ...。这种类型的管理在this post 有完整的描述 -
感谢您的建议,但您能解释一下“for /F "tokens=1,2" %%i in ("!i! !j!") do”是什么意思吗?我还是批次的新手。我刚试过你的代码,它没有显示它重复了多少次
-
您可以在命令提示符下键入
for /?并阅读帮助屏幕,或者查看网络中存在的有关for命令的众多描述中的任何一个,例如this 或@987654323 @, etc... 在这种情况下,它将!i!和!j!的值分配给%%i和%%j,因此!map[%%i][%%j]!可以正确使用。
标签: batch-file for-loop if-statement random