簡體   English   中英

從批處理文件中的文件中隨機選擇一行

[英]Pick a random line from a file in a batch file

我正在嘗試制作一個Character_Picker.bat ,以回顯從characters.txt隨機選擇的字符串作為長文本文件。 我不知道如何隨機選擇。

Characters.txt:

Disco Jockey Acid Pol
Double Agent Acid Pol
Muaythai Acid Pol
Paramedic Acid Pol
WWII Acid Pol
WWII Acid Pol
PB Quinn Chou
Secret Agent Chou
Rider Chou
General Chou
Grim Reaper Chou
Psycho Nurse Chou
Highschool Chou
Invasion Chou
Army Agent Chou
Kung Fu Chou
Rogue Agent Chou
Sweet Heart Chou
.
.
.
.333 strings more

我的批處理代碼:

@echo off
color a
cd Desktop
start "characters.txt"  ==> this is the thing where I stuck
set /a string=%random% %% 334
echo %string%

我想這就是你想要的。

@echo off
set /a rand=%random% %% 334
for /f "tokens=1* delims=:" %%i in ('findstr /n .* "d:\characters.txt"') do (
if "%%i"=="%rand%" echo %%j
)

我們設置rand並將隨機數限制為334。然后,我們讀取文件並找到行號,如果該數字與隨機字符串匹配,則打印該字符串。

只是為了您了解delims=:部分。 findstr /n .* "d:\\characters.txt"將打印行號,然后是冒號和實際行。 就像是:

1:Disco Jockey Acid Pol
2:Double Agent Acid Pol
3:Muaythai Acid Pol
4:Paramedic Acid Pol
5:WWII Acid Pol
....

delims=:使用:作為分隔符,我們將行號分配給%%i ,將實際行文本分配給%%j因此將%%i%rand%匹配,然后打印%%j

首先,我將確定文本文件中的行數,然后確定該范圍內的隨機數,然后准確地提取此行,如下所示:

@echo off
for /F %%C in ('^< "characters.txt" find /C /V ""') do set "COUNT=%%C"
set /A "NUMBER=%RANDOM%%%%COUNT%"
if %NUMBER% gtr 0 (set "SKIP=skip=%NUMBER%") else (set "SKIP=")
for /F usebackq^ %SKIP:skip=skip^%^ delims^=^ eol^= %%L in ("characters.txt") do (
    echo(%%L
    goto :NEXT
)
:NEXT

如果目標行為空,則此代碼將返回下一個非空行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM