因此,我正在编写一个脚本,可以告诉脚本是否已执行某个操作。我开始使用一个0的2x2数组。我想在这四个元素中随机存储三个1,如果元素已经存储1,则echo重复通知用户。这是迄今为止的代码,即使多次选择相同的元素,它也不会重复重复。for循环中的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
值块时开始” -
如果!map [%% i] [%% j],您可以使用'for/F“标记= 1,2”%%我在(“!i!!j!”)中! EQU 0(set map [%% 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”tokens = 1,2“%%我在(”!我!!j!“)中”意味着什么?我还是新来的批次。我只是试过你的代码,并没有显示它重复多少次 – jacknip
你可以在命令提示符下键入'for /?'并阅读帮助屏幕,或者查看关于'for'命令的许多描述中的任何一个存在于网络中,如[this](https://ss64.com/nt/for_f.html)或[this](https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs /en-us/ntcmds_shelloverview.mspx?mfr=true)等等......在这种情况下,它将'!i!'和'!j!'的值赋给'%% i'和'%% j' ,所以'!map [%% i] [%% j]!'可以正确使用。 – Aacini