找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 25569|回复: 10

[文本处理] 排批处理怎样从多文本中提取任意一行文字组合?

[复制链接]
发表于 2015-1-31 17:08:13 | 显示全部楼层 |阅读模式
假设有两个文本:
文本A内容如下:
1
2
3
4
文本B内容如下:
a
s
d
f
g

希望生成一个C文件,
每点击一次批处理文件,在C文件里会产生任意两行数据,比如
第一次生成的是1a(希望能实现换行,如有难度不换行也可以)
第二次生成的是1s
第三次生成的是3g

纠结很久,先在这里谢过啦~
发表于 2015-1-31 17:21:45 | 显示全部楼层
回复 1# yimei_0210
1、任意是随机的意思吗?
2、包括重复的吗?
 楼主| 发表于 2015-1-31 17:41:23 | 显示全部楼层
本帖最后由 yimei_0210 于 2015-1-31 17:44 编辑

任意是随机
不要出现11  22这样的重复数据 谢谢
 楼主| 发表于 2015-1-31 17:59:44 | 显示全部楼层
2、包括重复的吗?  是指这种情况吗? 第一次生成的是1a  第二次也可以是1a  这个不要有~~
发表于 2015-1-31 18:46:59 | 显示全部楼层
本帖最后由 pcl_test 于 2015-1-31 19:15 编辑

回复 4# yimei_0210
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. if not exist C.txt cd.>C.txt
  4. :main
  5. set Alines=0
  6. set Blines=0
  7. for /f "tokens=* delims=" %%a in (A.txt) do (
  8. set /a Alines+=1
  9. )
  10. for /f "tokens=* delims=" %%b in (B.txt) do (
  11. set /a Blines+=1
  12. )
  13. set /a n1=%random%%%%Alines%+1
  14. set /a m1=%random%%%%Blines%+1
  15. set n2=0
  16. for /f "delims=" %%i in (A.txt) do (
  17. set /a n2+=1
  18. if "!n2!" == "%n1%" set Astr=%%i &&goto main1
  19. )
  20. :main1
  21. set m2=0
  22. for /f "delims=" %%j in (B.txt) do (
  23. set /a m2+=1
  24. if "!m2!" == "%m1%" set Bstr=%%j &&goto main2
  25. )
  26. :main2
  27. set Astr=%Astr:~0,-1%
  28. set Bstr=%Bstr:~0,-1%
  29. set word=%Astr%%Bstr%
  30. for /f "delims=" %%c in (C.txt) do (
  31. if "%word%." equ "%%c." (goto main)
  32. )
  33. echo %word%>>C.txt
复制代码
发表于 2015-1-31 19:03:10 | 显示全部楼层

  1. @echo off&setlocal enabledelayedexpansion
  2. :start
  3. set/a a=0,b=0,n=0,u=0,v=0,r=0
  4. (for /f "tokens=1-2 delims=:" %%i in ('type "A.txt"^|find /v /c "" ^&type "A.txt"^|findstr -Rn ".*"') do (
  5.     set/a a+=1
  6.     if !a! equ 1 set/a "n=%random%%%%%i"
  7.     if !n! neq 0 (set/a u+=1) else (goto :start)
  8.     if !u! neq 1 if %%i equ !n! set/p=%%j<nul&call :a&exit /b
  9. )) >>C.txt
  10. :a
  11. set/a a=0,b=0,n=0,u=0,v=0,r=0
  12. for /f "tokens=1-2 delims=:" %%i in ('type "B.txt"^|find /v /c "" ^&type "B.txt"^|findstr -Rn ".*"') do (
  13.     set/a b+=1
  14.     if !b! equ 1 set/a "r=%random%%%%%i"
  15.     if !r! neq 0 (set/a v+=1) else (goto :a)
  16.     if !v! neq 1 if %%i equ !r! set/p=%%j<nul&echo,&goto :eof
  17. )
复制代码
每点击一次,注入每次的随机提取数。
 楼主| 发表于 2015-1-31 23:04:49 | 显示全部楼层
回复 5# pcl_test



测试了5楼的写法,正符合需求。

真心感谢~~辛苦了!
 楼主| 发表于 2015-1-31 23:09:19 | 显示全部楼层
回复 6# 慕夜蓝化

六楼的写法,在多次点击后,会出现重复数据呢,不知何解。
发表于 2015-2-1 09:07:48 | 显示全部楼层
回复 8# yimei_0210

恩,因为没有考虑c.txt中的内容,我加了一个判断,并且将代码简化了一下。

  1. @echo off&setlocal enabledelayedexpansion
  2. :prepare
  3. call :start "1.txt" "2.txt"&type "c.txt"|find "!str!" >nul 2>nul||>>c.txt echo,!str!&&exit
  4. set "str="&goto :prepare
  5. :start
  6. set/a a=0,n=0,u=0
  7. if not "%~1"=="" (
  8.     for /f "tokens=1-2 delims=:" %%i in ('type "%~1"^|find /v /c "" ^&type "%~1"^|findstr -Rn ".*"') do (
  9.         set/a a+=1
  10.         if !a! equ 1 set/a "n=%random%%%%%i"
  11.         if !n! neq 0 (set/a u+=1) else (goto :start)
  12.         if !u! neq 1 if %%i equ !n! set "str=!str!%%j"&shift&goto :start
  13.     )
  14. ) else (
  15.     goto :eof
  16. )
复制代码
发表于 2015-2-1 10:07:54 | 显示全部楼层

  1. @echo off&setlocal enabledelayedexpansion
  2. :prepare
  3. call :start "1.txt" "2.txt"&type "c.txt"|find "!str!" >nul 2>nul||>>c.txt echo,!str!&&exit
  4. set "str="&goto :prepare
  5. :start
  6. set/a a=0,n=0
  7. if not "%~1"=="" (
  8.     for /f "tokens=1-2 delims=:" %%i in ('type "%~1"^|find /v /c "" ^&findstr -Rn ".*" "%~1"') do (
  9.         set/a a+=1
  10.         if !a! equ 1 set/a n=%random%%%%%i+1
  11.         if !a! neq 1 if %%i equ !n! set "str=!str!%%j"&shift&goto :start
  12.     )
  13. )
复制代码
解决了使用findstr搜索文本时,无法搜索到最后一行的bug。
以及余数未+1的错误,并简化代码。
 楼主| 发表于 2015-2-2 10:35:02 | 显示全部楼层
回复 10# 慕夜蓝化


好的,我再试试看~~有不明之处会再来请教
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 19:09 , Processed in 0.030335 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表