Board logo

标题: [文本处理] 批处理怎样随机读取一行文本内容? [打印本页]

作者: lijinpengying    时间: 2013-8-1 11:10     标题: 批处理怎样随机读取一行文本内容?

亲爱的大大些,我又来麻烦各位了。
我有一个文本,里面有若干行内容,现在就是想随机显示其中一行。我的代码不对劲啊!
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f %%i in (123.txt) do (
  3. set /a num+=1
  4. set /a num2=!random! %% 100
  5. if !num2! leq !num! echo %%i
  6. )
  7. pause
复制代码
这代码是随机显示的,有可能什么也不显示,有可能显示几行……
求教!
作者: gawk    时间: 2013-8-1 11:45

set /a num2=!random! %% 100
这一行的目的是什么?
作者: canyuexiaolang    时间: 2013-8-1 12:32

本帖最后由 canyuexiaolang 于 2013-8-1 12:52 编辑
  1. @echo off
  2. for /f "tokens=* delims=" %%i in (123.txt) do set /a num+=1
  3. ::获取123.txt的总行数避免行数超过
  4. set /a linenum=%random%%%num%
  5. ::随机生成行数小于等于总行数
  6. for /f "skip=%linenum% tokens=* delims=" %%i in (123.txt) do if not defined a (echo %%i&set "a=0")
  7. ::获取一行后定义a变量以免获取多行
  8. pause
复制代码

作者: PowerShell    时间: 2013-8-1 14:40

本帖最后由 PowerShell 于 2013-8-1 14:42 编辑

powershell 代码
  1. Get-Random -InputObject (Get-Content d:\123.txt)
复制代码
每次随机输出一行,这样就可以赋值
  1. $aaa = Get-Random -InputObject (Get-Content d:\123.txt)
复制代码

作者: batman    时间: 2013-8-2 08:02

本帖最后由 batman 于 2013-8-2 08:03 编辑
  1. @echo off
  2. for /f "tokens=1* delims=:" %%a in ('findstr /n .* a.txt') do set "_%%a=%%b"&set /a n=%%a
  3. set /a a=%random% %% %n%+1
  4. call,echo,%%_%a%%%
  5. pause>nul
复制代码

作者: CrLf    时间: 2013-8-2 16:18

第三方 shuf.exe:
  1. shuf -n 1 a.txt
复制代码
gnu sort 7.6 也很给力:
  1. sort -R a.txt|sed "1!d"
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2