CMD/BAT - [решено] Скрипт для случайного выбора строки из файла

Ответить
Аватара пользователя
Guest

CMD/BAT - [решено] Скрипт для случайного выбора строки из файла

Сообщение Guest »

Здравствуйте. Решил написать сюда, вдруг кто поможет, самому не получается решить эту проблему.

Суть такова: нужен скрипт, который из заранее созданного txt-файла извлечет значение каждой строки в переменную, причем переменные должны быть числовыми, и нарастать с шагом 1. То есть, у нас есть файл с содержанием



Код:

Код: Выделить всё

crossfire.bsp
lambda_core.bsp
the_beach.bsp

и нужно, чтобы переменная "1" содержала первую строку, "crossfire.bsp", а переменная "3" третью строку "the_beach.bsp".

Дальше нужно осуществить рандомную выборку строки по имени переменной, для этого я нашел кусок кода



Код:

Код: Выделить всё

call :RND 1 10 n
:RND
set MIN=%1
set MAX=%2
SET /A %3=%MIN%+(%MAX%-%MIN%+1)*%random%/32768

Теперь нужно решить, как определить суммарное количество строк и подставить его в качестве второго параметра при обращении к генератору случайных чисел.

Для чего всё это нужно - при запуске игрового сервера получить список всех установленных карт и случайно выбрать одну из них.

Если кто подскажет, как все это выполнить в bat-сценарии, буду очень благодарен.
Аватара пользователя
amel27

Re: CMD/BAT - [решено] Скрипт для случайного выбора строки из файла

Сообщение amel27 »

Anonymоus, где-то так:

Код: Выделить всё

@Echo Off
For /F "Tokens=1,2 Delims=[]" %%i In ('Find /V /N "" "file.txt"') Do Set $_%%i=%%j
For /F "Tokens=*" %%i In ('^<"file.txt" Find /V /C ""') Do Set NUM=%%i
:LOOP
  Set /A RND=1+%RANDOM%/(32768/%NUM%)
  If %RND% GTR %NUM% Set /A RND-=1
  Call Echo %%$_%RND%%%
  PAUSE >Nul
GoTo :LOOP
Аватара пользователя
Guest

Re: CMD/BAT - [решено] Скрипт для случайного выбора строки из файла

Сообщение Guest »

Спасибо, что откликнулся - но скрипт работает не совсем так, как нужно. Каждый раз выбирается одна и та же строка.

UPD: Попробовал запустить отдельно генератор рандомных чисел - каждый раз выдает одно и то же, значит проблема в нем.
Аватара пользователя
Guest

Re: CMD/BAT - [решено] Скрипт для случайного выбора строки из файла

Сообщение Guest »

Цитата Anonymоus:



Попробовал запустить отдельно генератор рандомных чисел - каждый раз выдает одно и то же
CMD/BAT - [решено] Скрипт для случайного выбора строки из файла




это генератор псевдослучайной последовательности чисел - для каждого батника эта последовательность "проигрывается" заново, в пределах одного батника числа отличаются
Аватара пользователя
Guest

Re: CMD/BAT - [решено] Скрипт для случайного выбора строки из файла

Сообщение Guest »

Цитата amel27:



псевдослучайной последовательности
CMD/BAT - [решено] Скрипт для случайного выбора строки из файла




Ясно, а можно что-нибудь придумать, чтобы при каждом запуске батника каждый раз генерировались разные числа? Т.е. мне нужно при запуске батника выбрать случайную строку из файла, может быть существуют консольные утилиты, позволяющие генерировать случайное число в заданном диапазоне?
Аватара пользователя
amel27

Re: CMD/BAT - [решено] Скрипт для случайного выбора строки из файла

Сообщение amel27 »

Цитата Anonymоus:



что-нибудь придумать, чтобы при каждом запуске батника каждый раз генерировались разные числа?
CMD/BAT - [решено] Скрипт для случайного выбора строки из файла




1. Подождать несколько секунд - стартовое число генерится на базе текущего времени;

2. Запускать батники из одной CMD-сессии/другого батника, а не создавать каждый раз новую.
Аватара пользователя
Guest

Re: CMD/BAT - [решено] Скрипт для случайного выбора строки из файла

Сообщение Guest »

Спасибо, разобрался, организовал цикл - N запусков генератора чисел внутри скрипта, где N основано на миллисекундах в текущем времени на момент запуска. Теперь все работает.
Аватара пользователя
Guest

Re: CMD/BAT - [решено] Скрипт для случайного выбора строки из файла

Сообщение Guest »

For /F "Tokens=1,2 Delims=[]" %%i In ('Find /N "7777" "temp.txt"') Do Set $_%%i=%%j



А как можно в дальнейшем применить переменную $_%%i чтоб работать с каждой строкой, а то если просто посмотреть результат переменной




Цитата:



echo %$_%%i%



выходит




Цитата:



%$_%%i%



мне нужно работать с той строкой к которой пришла переменная $_3=



а потом со строкой $_5=
Аватара пользователя
amel27

Re: CMD/BAT - [решено] Скрипт для случайного выбора строки из файла

Сообщение amel27 »

Цитата neogara:



echo %$_%%i%
CMD/BAT - [решено] Скрипт для случайного выбора строки из файла






Код:


Цитата neogara:



мне нужно работать с той строкой к которой пришла переменная $_3=
CMD/BAT - [решено] Скрипт для случайного выбора строки из файла






Код:

Код: Выделить всё

for /f "tokens=1* delims==" %%i in ('set $_') do (
echo var:%%i
echo val:%%j
)
Ответить

Вернуться в «Скриптовые языки администрирования Windows»