1

我无法让以下事情正常工作。我有一个 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%

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

4

2 回答 2

4

尝试这个:

@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
于 2013-03-25T15:35:01.473 回答
1

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

通过将 0 和 32767 代入以下内容(代替 %random%),这似乎是您需要从 1 到 400(含)的值:

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

于 2013-03-25T15:23:37.060 回答