Windows批处理 - 文本文件中的随机行

时间:2013-03-25 14:24:01

标签: batch-file

我无法完成以下工作。我有一个400行的文本文件,并在不断增长。我需要一个批处理脚本,从该文件中选择一个随机行。

我尝试修改一些执行随机化的代码,但有时它会选择一个大于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%

我想有一种更简单的方法来处理这个问题?任何帮助表示赞赏!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

%RANDOM%返回0到32767之间的随机十进制数...

通过将0和32767替换为以下(代替%random%),这似乎是您需要获得1到400(包括1和400)的值:

SET /a randomfixed = 1 + (%random% * (400-1) / 32767)
(您的版本提供1到401的结果)