【发布时间】:2022-01-05 22:28:25
【问题描述】:
有一个批处理文件在 list.txt 中查找 Pen=n 并从给定的十个数字行中随机更改其值 (n) (set "var[pen]=1 2 3 4 5 6 7 8 9 10")。但是如果有十多个数字说二十(设置“var [pen] = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20”)或一百,它仍然是从前十个忽略其余的。
@echo off
setlocal EnableDelayedExpansion
set "file=D:\list.txt"
set "temp=D:\temp.txt"
set "var[pen]=1 2 3 4 5 6 7 8 9 10" &
for /L %%i in (1,10,1%time:~-2%) do set "rand=!random!"
(for /F "usebackq tokens=1,2 delims==" %%a in ("%file%") do (
if defined var[%%a] (
call :getRandomValue var="!var[%%a]!"
echo %%a=!var!
) else if "%%b" neq "" (
echo %%a=%%b
) else (
echo %%a
)
)) > "%temp%"
move /Y "%temp%" "%file%"
pause > nul && pause > nul
goto :EOF
:getRandomValue value="list"
set /A "rand=!random:~-1!+1"
for /F "tokens=%rand%" %%v in (%2) do set "%1=%%v"
任何帮助将不胜感激。
编辑: list.txt 包含一个列表,如钢笔纸橡胶等,旁边有相应的值。
pen=5
pencil=43
paper=0
rubber=22
bat 文件所做的只是将随机数从提供的数字行中提取出来。在以下情况下,它会将 pen 的值更改为从 1 到 10 的随机数。但如果我添加一些超过 10 的额外数字,它将忽略它们。
【问题讨论】:
-
我真的不知道你的代码是用来做什么的,这对我来说毫无意义。如果您edit您的问题并尝试解释它可能会有所帮助。如果您在这样做时还提供一些
D:\list.txt的示例内容,将不胜感激。 -
set /A "rand=!random:~-1!+1"在1和10之间选择一个数字,如果您想在1和20之间选择一个随机数,请更改该行。当然,您发布所有这些内容并不是为了要求我们提供代码以在一个范围内选择一个随机整数!我敢打赌,搜索工具可以很容易地找到这样的例子。
标签: for-loop batch-file random cmd