1

次のことがうまくいきません。400 行のテキスト ファイルがあり、その数は増え続けています。そのファイルからランダムに 1 行を選択するバッチ スクリプトが必要です。

ランダム化を行ういくつかのコードを変更しようとしましたが、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 までのランダムな 10 進数を返します ...

0 と 32767 を次の(%random% の代わりに)に代入することにより、これは 1 から 400 までの値を取得するために必要なもののようです:

SET /a randomfixed = 1 + (%random% * (400-1) / 32767)
(お使いのバージョンでは 1 から 401 までの結果が得られます)

于 2013-03-25T15:23:37.060 に答える