[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 【已解决】批处理如何随机读取一文本文档中的某行?

求一个能读取批定文本文档中随机行的批处理。谢谢。小弟第一次发帖。

[ 本帖最后由 smallbear 于 2009-5-21 17:49 编辑 ]
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2

@echo off
for /f "delims=[]" %%i in ('type 1.txt^|find /v /n ""') do set tal=%%i
:loop
set /a run=%random%%%tal
if %run% equ 0 goto loop
for /f "tokens=2 delims=[]" %%a in ('type 1.txt^|find /n "%run%"') do echo 这是第%run%行%%a
echo.&echo.按任意键显示下一个随机行
pause >nul
goto loop

[code]

TOP

  1. @echo off
  2. cd /d "文本所在路径\"
  3. for /f "delims=: tokens=2" %%a in ('find /c /v "" a.txt') do set n=%%a
  4. set /a m=%random% %% n
  5. if %m%==0 (set skip=) else set skip=skip=%m%
  6. for /f "%skip% delims=" %%a in (a.txt) do set "str=%%a" & goto end
  7. :end
  8. echo "%str%"
  9. pause
复制代码
2

评分人数

    • Batcher: Good work!PB + 2
    • namejm: 能读取到第1行内容,思维很缜密。PB + 2

TOP

谢谢帮忙。非常感谢。

TOP

  先用 findstr /n 判断文档总行数,然后用 random 在指定范围内生成随机数,最后,跳过随机数行直接读取下一行即可,演示代码如下:
  1. @echo off
  2. for /f "delims=:" %%i in ('findstr /n . test.txt') do set total=%%i
  3. :loop
  4. set /a rnd=%random% %% %total%
  5. if %rnd% equ 0 goto loop
  6. for /f "skip=%rnd% delims=" %%i in (test.txt) do set "str=%%i"&goto end
  7. :end
  8. echo "%str%"
  9. pause
复制代码
  注:本代码不能获取第1行内容,要想获取到第1行内容,请看4楼代码。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

返回列表