2013-03-25 63 views
1

我無法獲得以下工作。我有一個400行的文本文件,並且正在增長。我需要一個批處理腳本來選擇一個單一的隨機線形式的文件。Windows批處理 - 來自文本文件的隨機線路

我試圖修改一些代碼,不會隨機化,但有時它挑選一個數字,大於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

如果文件只有1行,該怎麼辦? – 2013-03-25 21:10:15

+2

在這種情況下,代碼正確回顯線#1!但是,沒有人需要一個單行文件的隨機輸出。 – Endoro 2013-03-25 21:28:54