很抱歉这个长度,但我得到的错误可能包含了我的所有代码。
我创建了两个文件,一个(rngInputTest)启动并检查执行循环,并通过call命令中的参数将四个变量传递给第二个(rngCompare)文件。
然后第二个文件获取四个参数并将它们保存到rngCompare本地的四个变量,然后使用%random%两次。之后,它将两个新变量(rng1和rng2)设置为比较var,方法是将它们加在一起并将比较传递回rngInputTest,并将参数保存到var结果中。
然后rngInputTest进行最后的检查,如果checkLoop var为2则转到最终的标签/函数(rngInputTestDisplay),它起作用,它回应结果很好。我遇到的问题是,如果没有我的解决方法,在rngInputTestDisplay运行一次之后第二次执行rngInputTestDisplay(没有调用其他标签/函数,第二次运行rngInputTestDisplay时它会清空结果var) )
我目前的解决方法是
IF %checkLoop%==%logicIII% goto :end
我将它放在rngInputTestDisplay的开头,它会停止额外的迭代。
没有解决方法,即使放入:
echo in [label]
pause
在所有标签/函数中,在rngInputTest和rngCompare中,我仍然无法弄清楚额外的迭代是如何发生的,虽然我注意到执行只循环到rngInputTestDisplay,但没有执行任何先前的标签。 / p>
这两个文件的最终目标是创建一个可重复使用的随机数,这样我就可以多次调用第一个数据并将不同的数据集传递给它,然后将该数据返回给'main'文件。我知道我可以使用%random%一次并保存自己的头痛但是在使用它之后它并没有真正感觉到随机
我已将这两个文件包括在
之下rngInputTest.bat
@ECHO off
::increment the loop-check var
set /a checkLoop+=1
goto :initLoopCheck
::used to check for looping
:initLoopCheck
::before execution loops to rngCompare
set logicI=1
::after execution loops back from rngCompare
set logicII=2
::used in rngInputTestDisplay,phantom loop
set logicIII=3
::starts the initial loop
IF %checkLoop%==%logicI% goto :rngInputTestInitVarSet
::checks if code has looped back from rngCompare.bat
IF %checkLoop%==%logicII% goto :logic
::sets all the non-increment variables
:rngInputTestInitVarSet
::min-max's for use in rngCompare.bat :randomGen
set minI=0
set maxI=50
set minII=0
set maxII=50
goto :logic
::checks to see how far checkLoop has incremented
:logic
IF %checkLoop%==%logicI% goto :rngInputTestPass
IF %checkLoop%==%logicII% goto :rngInputTestDisplay
::passes min-max's to rngCompare via parameters
:rngInputTestPass
set checkLoop+=1
call rngCompare.bat %minI% %minII% %maxI% %maxII%
goto :rngInputTestDisplay
:rngInputTestDisplay
::this IF is important
::without it the code would loop..only to
:: :rngInputTestDisplay
::which causes result to be empty
IF %checkLoop%==%logicIII% goto :end
set /a checkLoop+=1
set result=%~1
echo result:%result%
pause
:end
rngCompare.bat
@ECHO off
goto :rngCompareInitVarSet
::initial variable set
:rngCompareInitVarSet
set MaxI=0
set MaxII=0
set MinI=0
set MinII=0
set result=0
goto :afterPass
::after rngInputTestPass
:afterPass
set MinI=%~1
set MinII=%~2
set MaxI=%~3
set MaxII=%~4
goto :randomGen
::generate two random numbers
:randomGen
::gets two random numbers from the variables passed from rngInputTest.bat
set /a rngI=(%RANDOM%*%MaxI%/32768)+%MinI%
set /a rngII=(%RANDOM%*%MaxII%/32768)+%MinII%
goto :compareRNG
::add the two rng numbers
:compareRNG
::adds the two numbers together
set /a compare=%rngI%+%rngII%
goto :passToRNGInputTest
::pass the compare var back to rngInputTest
:passToRNGInputTest
call rngInputTest.bat %compare%
答案 0 :(得分:0)
太复杂了。您不必来回传递值。您已经在环境变量中设置了它们,并且第二个批处理文件在同一个环境中运行,因此一个中更新的任何内容都可供另一个使用。
例如,这两个简单的批处理文件将显示值可用。
myFirst.bat
@echo off
set /a myVal1=1
set /a myVal2=2
set /a myVal3=3
set /a myVal4=4
call mySecond.bat
echo my updated values from second batch
echo %myVal1%
echo %myVal2%
echo %myVal3%
echo %myVal4%
pause
mySecond.bat
@echo off
echo my values created in first batch
echo %myVal1%
echo %myVal2%
echo %myVal3%
echo %myVal4%
set /a myVal1=%myVal1%+%Random%
set /a myVal2=%myVal2%+%Random%
set /a myVal3=%myVal3%+%Random%
set /a myVal4=%myVal4%+%Random%
pause
如果您不止一次拨打第二个,只需让它结束,不要再次调用第一个文件。当第二个蝙蝠完成后,它将从Call
返回到第一个文件。