2014-05-14 90 views
0

我試圖設置一個批處理文件,通過Steam Achievement Manager一次啓動10個Steam遊戲。這裏是我正在使用的當前腳本(其中包括多於10個):在Windows批處理文件中設置隨機陣列

@echo off 
echo Launching Steam games... 
start sam.game.exe 233720 
start sam.game.exe 113200 
start sam.game.exe 219640 
start sam.game.exe 2500 
start sam.game.exe 204300 
start sam.game.exe 49600 
start sam.game.exe 107100 
start sam.game.exe 730 
start sam.game.exe 550 
start sam.game.exe 35700 
start sam.game.exe 92300 
start sam.game.exe 217690 
start sam.game.exe 620 
start sam.game.exe 8930 
start sam.game.exe 57690 
start sam.game.exe 24240 
start sam.game.exe 3830 
start sam.game.exe 35140 
start sam.game.exe 200260 
start sam.game.exe 4920 
start sam.game.exe 245070 
start sam.game.exe 204360 
start sam.game.exe 46750 
start sam.game.exe 300 
start sam.game.exe 18500 
start sam.game.exe 63800 
start sam.game.exe 214340 
start sam.game.exe 25800 
start sam.game.exe 8500 
start sam.game.exe 212680 
start sam.game.exe 4000 
start sam.game.exe 41800 
start sam.game.exe 220 
start sam.game.exe 25890 
start sam.game.exe 219150 
start sam.game.exe 1250 
start sam.game.exe 42170 
start sam.game.exe 202090 
start sam.game.exe 220860 
start sam.game.exe 4700 
start sam.game.exe 32200 
start sam.game.exe 22100 
start sam.game.exe 39800 
start sam.game.exe 91900 
start sam.game.exe 40300 
start sam.game.exe 4760 
start sam.game.exe 45100 
start sam.game.exe 11200 
start sam.game.exe 107200 
start sam.game.exe 99900 
start sam.game.exe 440 
start sam.game.exe 105600 
start sam.game.exe 207610 
start sam.game.exe 206440 
start sam.game.exe 24010 
start sam.game.exe 46540 
start sam.game.exe 13230 
start sam.game.exe 42960 
pause 

您在那裏看到的數字是Steam遊戲ID。基本上,我希望能夠創建一個填充了我擁有的所有Steam遊戲ID的數組,以及隨機選擇其中10個(非重複)的腳本,並且只從這10個開始。我非常新批處理文件,所以我遇到了很多麻煩。

回答

0
@echo off 
setlocal EnableDelayedExpansion 

rem You may define next value from a parameter, if you wish 
set number=10 

rem Define the array of game ID's 
set n=0 
for %%a in (233720 113200 219640 2500 204300 49600 107100 730 550 35700 
      92300 217690 620 8930 57690 24240 3830 35140 200260 4920 
      245070 204360 46750 300 18500 63800 214340 25800 8500 212680 
      4000 41800 220 
      ) do (
    set /A n+=1 
    set gameID[!n!]=%%a 
) 

rem Select %number% non-duplicated random elements from previous array and run such Steam games 
for /L %%n in (1,1,%number%) do (
    rem Get the index of a random element 
    call :getRandomElem i= 
    rem Run such game 
    for /F %%i in ("!i!") do start sam.game.exe !gameID[%%i]! 
    rem Put a zero in such element 
    set gameID[!i!]=0 
) 

goto :EOF 


rem Get the index of a random element greater than 0 from gameID array 
:getRandomElem i= 
set /A i = n * %random%/32768 + 1 
if !gameID[%i%]! equ 0 goto getRandomElem 
exit /B 

你可以在this post審查陣列管理的詳細解釋在批處理文件。

+0

非常感謝! – Craig

0
@ECHO OFF 
SETLOCAL enabledelayedexpansion 
:: remove variables starting $ 
FOR /F "delims==" %%a In ('set $ 2^>Nul') DO SET "%%a=" 

FOR /f "tokens=1,2delims=[]" %%a IN ('type q23645114.txt^|find /n /v "" ') DO SET $%%a=%%b&SET max=%%a 

SET /a games=5 

:choose 
SET /a index=(%RANDOM% %% %max%) + 1 
IF NOT DEFINED $%index% GOTO choose 
ECHO START sam.game.exe !$%index%! 
SET "$%index%=" 
SET /a games-=1 
IF %games% gtr 0 GOTO choose 

GOTO :EOF 

你不是說你在哪裏讓你的遊戲號碼,所以我用了一個名爲q23645114.txt文件,其中包含這個數據我的測試。

63800 
214340 
25800 
8500 
212680 
4000 
41800 
220 
25890 
219150 

這個程序做的第一件事是明確的是,開始$

然後讀取文件q23645114.txt並使用find將其轉換爲 任何變量[1] 63800 [2] 214340 。 ...

/n安裝[編號]和/v ""說'查找所有行不包含任何內容')

然後,使用[]作爲分隔符,它分配1到第一metavariable%%a63800到第二,%%b。然後爲整個文件設置$163800等等。它也跟蹤max

最大數量(=行數)然後將遊戲的數量(到5進行測試 - 你選擇的任何其他值...)

然後chhoses一個隨機數0 ..(max-1)通過調用modulus運營商%% - 並添加一個

查看是否設置了$ thatindex。如果不是,則再次選擇。

如果已設置,則開始遊戲編號,從陣列中清除遊戲編號,統計一個遊戲開始並重新選擇,直到所需的編號開始。

(代碼僅echo上課的start用於測試目的 - 驗證真正開始遊戲後更改echo startstart