有一個批處理檔案在 list.txt 中查找 Pen=n 并從給定的十個數字行中隨機更改其值 (n)(設定“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 的額外數字,它將忽略它們。
uj5u.com熱心網友回復:
您的目標是從串列中隨機索引,這需要您首先確定串列中的專案數。
這樣做的一種方法:
@Echo off
Set "var[pen]=a b c d e f g h i"
Rem enable enviroment for !expanison!
Setlocal EnableDelayedExpansion
Rem Build 'array', splitting string on spaces and incrementing array size count
Set _i=1& Set "item[1]=%var[pen]: =" & Set /A "_i =1" & Set "item[!_i!]=%"
Rem index randomly from known array size [one indexed]
For /f delims^= %%i in ('Set /A !random! %%!_i! 1')Do Echo(Item:%%i = !Item[%%i]!
Pause
uj5u.com熱心網友回復:
您忘記指定此問題的原始帖子。在這樣的帖子中,沒有任何關于如何給出概率的規范,但是提供的所有 3 個示例都有 10 個概率值,所以我假設所有概率都有 10 個值。修復方法是添加每個值可以具有的概率數:
@echo off
setlocal EnableDelayedExpansion
rem Define the probabilities for new values
set "value[apple]=0 0 0 0 0 0 0 1 1 1" & set "num[apple]=10" & rem 0 (70%) or 1 (30%)
set "value[peach]=0 0 0 0 0 1 2 3 4 5" & set "num[peach]=10" & rem from 0 (50%) to 5 (the rest 50%)
set "value[banana]=54 68 82 96" & set "num[banana]=4" & rem each 25%
rem Randomize
for /L %%i in (1,10,1%time:~-2%) do set "ran=!random!"
(for /F "tokens=1,2 delims==" %%a in (input.ini) do (
if defined value[%%a] (
call :getRandomValue value=%%a
echo %%a=!value!
) else if "%%b" neq "" (
echo %%a=%%b
) else (
echo %%a
)
)) > output.ini
move /Y output.ini input.ini
goto :EOF
:getRandomValue value=item
set /A "ran=%random%%%num[%2] 1"
for /F "tokens=%ran%" %%v in ("!value[%2]!") do set "%1=%%v"
exit /B
您也(再次)忘記提供輸入檔案的真實格式,包括[headers]:
[Berries]
Strawberry=1
Blackberry=-13
Blueberry=100
Cherry=6
[Fruits]
apple=0
peach=4
banana=18
orange=-2.5
[Vegetables]
Potato=44
Tomato=2
Onion=0
Garlic=17
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/405075.html
標籤:
