Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Скрипт для случайного выбора строки из файла (http://forum.oszone.net/showthread.php?t=287404)

mapisic 03-09-2014 09:03 2397697

Скрипт для случайного выбора строки из файла
 
Приветствую, нужен скрипт который из заданного txt-файла выберет рандомную строку и запустит необходимую команду.
Например, есть txt-файл вида:
Код:

yandex.ru
mail.ru
1.1.1.1
2.2.2.2
...и т.д.

нужно рандомно выбрать любую строчку и запустить например
Код:

ping %рандомная_строка_из_файла%
попробовал из темы http://forum.oszone.net/thread-165488.html скрипт
Код:

@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

но он подставляет вместо yandex,mail,google номер строки из txt-файла
как быть?

Georgio 03-09-2014 10:01 2397715

Код:

@echo off

for /f "usebackq delims=" %%i in ("example.txt") do (
 call set $%%random%%=%%i
 )
for /f "tokens=2 delims==" %%i in ('set $') do (
 ping "%%i"
 exit /b
 )


или


Код:

@echo off

for /f "usebackq delims=" %%i in ("example.txt") do (
 call set $%%random%%=%%i
 )
for /f "delims==" %%i in ('set $') do (
 call ping "%%%%i%%"
 exit /b
 )


.

mapisic 03-09-2014 16:23 2397894

во блин, спасибо, от души :)
а можно еще сюда впихнуть рандомное количество пингов
т.е.
Цитата:

set min=5
set max=10
set /a raz=min+(max-min+1)*%random%/32768
ping "%%i" -n %raz%
всё время одно и тоже число %raz% выдает

Iska 03-09-2014 16:48 2397917

Цитата:

Цитата mapisic
всё время одно и тоже число %raz% выдает »

«setlocal enableextensions enabledelayedexpansion» в начале пакетного файла и «!raz!» вместо «%raz%».

Georgio 03-09-2014 17:43 2397938

Код:

@echo off

for /l %%i in (1 1 100) do (
 for /l %%j in (5 1 10) do (
  call set #%%random%%=%%j
  )
 )
for /f "delims==" %%i in ('set #') do (
 call set raz=%%%%i%%
 goto:#
 )
:#
for /f "usebackq delims=" %%i in ("example.txt") do (
 call set $%%random%%=%%i
 )
for /f "delims==" %%i in ('set $') do (
 call ping "%%%%i%%" -n %raz%
 exit /b
 )


mapisic 04-09-2014 11:31 2398226

Georgio, а без exit можно сделать? чтобы повторялось (и рандомное raz и строка в файле) в пределах одного bat-файла? одно и тоже число raz всегда :(

Georgio 04-09-2014 12:26 2398254

mapisic, даже без переменной "raz":


Код:

@echo off

:#
setlocal
for /f "usebackq delims=" %%i in ("example.txt") do (
 call set $%%random%%=%%i
 )
for /f "delims==" %%i in ('set $') do (
 for /l %%j in (1 1 100) do (
  for /l %%k in (5 1 10) do (
  call set #%%random%%=%%k
  )
  )
 for /f "delims==" %%j in ('set #') do (
  call ping "%%%%i%%" -n %%%%j%%
  endlocal
  goto:#
  )
 )


.

mapisic 04-09-2014 13:02 2398262

Цитата:

Цитата Georgio
for /l %%j in (1 1 100) do ( »

в вот эта строчка что значит???

Georgio 04-09-2014 13:16 2398271

mapisic, эта строчка для увеличения выборки. Назначаются по сто разных переменных со значениями "5", "6", "7", "8", "9", "10". Выборка увеличивается с 6 элементов до 600!


Время: 21:26.

Время: 21:26.
© OSzone.net 2001-