2013-03-25 2 views
1

Я не могу заставить работать следующее. У меня есть текстовый файл с 400 строк и растет. Мне нужен пакетный скрипт, который выбирает одну случайную строчную форму этого файла.Windows Batch - случайная строка из текстового файла

Я попытался изменить код, который делает рандомизации, но иногда он выбирает число, которое больше чем 400 и сценарий возвращает ошибку:

set "file=C:\Users\User\Desktop\resolutions.txt" 
for /f %%N in ('findstr "." "%file%"^|find /c /v ""') do set lines=%%N 
set /a "iterations=%random% %% 1 + 1" 

set /a randomfixed = %random% * %Lines%/32767 + 1 

for /f "skip=%randomfixed% tokens=* delims=" %%j IN (C:\Users\User\Desktop\useragents.txt) do (
set /a N+=1 
    set var!N!=%%j 
) 
@echo %var1% 

Я предполагаю, что есть простой способ справиться с этим? Любая помощь приветствуется!

ответ

1

%RANDOM% возвращает случайное десятичное число в диапазоне от 0 до 32767 ...

Подставив в 0 и 32767 в следующем (вместо% случайных%), это, кажется, что вы будете необходимо получить значение от 1 до 400 включительно:

SET /a randomfixed = 1 + (%random% * (400-1)/32767)
(ваша версия дает результаты от 1 до 401)

3

Попробуйте это:

@echo off &setlocal 
set /a count=0 
for /f "tokens=1delims=:" %%i in ('findstr /n "^" "file.txt"') do set /a count=%%i 
set /a rd=%random%%%count 
if %rd% equ 0 (set "skip=") else set "skip=skip=%rd%" 
set "found=" 
for /f "%skip%tokens=1*delims=:" %%i in ('findstr /n "^" "file.txt"') do if not defined found set "found=%%i"&set "var=%%j" 
echo.random line %found%: %var% 
endlocal 
+0

Что делать, если файл имеет только одну строку? –

+2

В этом случае код правильно выполняет эхо-строку # 1! Но никто не нуждается в случайном выходе из одного файла строки. – Endoro

Смежные вопросы