Board logo

标题: [文本处理] 【已解决】BAT:随机读取文本数据,组合成新的文本 [打印本页]

作者: 思想之翼    时间: 2014-6-14 04:58     标题: 【已解决】BAT:随机读取文本数据,组合成新的文本

本帖最后由 思想之翼 于 2014-6-14 11:54 编辑

有210个文件夹,分别命名为001-210;每个文件夹内有20个txt文本,分别命名为01-20;每个txt文本记录一行数据,格式统一为00 12 54 89 05 36 63 77

现在欲从210个文件夹内,分别随机读取一个txt文本的数据,组合成210行数据,写入新建的txt文本。格式如下:
93 51 06 23 87 93 58 69 (001文件夹内随机读取的txt文本数据)
54 42 28 96 70 41 62 08 (002文件夹内随机读取的txt文本数据)
51 91 92 18 18 01 66 13 (003文件夹内随机读取的txt文本数据)
27 77 38 57 39 84 28 40 (004文件夹内随机读取的txt文本数据)
...
这样的BAT如何写?
作者: 522235677    时间: 2014-6-14 10:54

本帖最后由 522235677 于 2014-6-14 10:57 编辑
  1. @echo off & setlocal enabledelayedexpansion
  2. for /l %%a in (1 1 210) do (
  3. if %%a lss 10 set f=00%%a
  4. if %%a lss 100 (if %%a gtr 9 set f=0%%a) else (set f=%%a)
  5. set /a rn=!random!%%20+1
  6. if !rn! lss 10 set rn=0!rn!
  7. (for /f "delims=" %%b in (!f!\!rn!.txt) do echo %%b (!f!文件夹内随机读取的txt文本数据))>>1.txt
  8. )
  9. pause
复制代码

作者: 思想之翼    时间: 2014-6-14 20:54

回复 2# 522235677

如果:每个文件夹内有300个txt文本,分别命名为001-300
上述代码修改为:
set /a rn=!random!%%300+1
就可以了吗?
作者: 522235677    时间: 2014-6-14 22:24

回复 3# 思想之翼
  1. @echo off & setlocal enabledelayedexpansion
  2. for /l %%a in (1 1 210) do (
  3.         if %%a lss 10 set f=00%%a
  4.         if %%a lss 100 (if %%a gtr 9 set f=0%%a) else (set f=%%a)
  5.         set /a rn=!random!%%300+1
  6.         if !rn! lss 10 set rn=00!rn!
  7.         if !rn! lss 100 if !rn! gtr 9 set f=0%%a
  8.         (for /f "delims=" %%b in (!f!\!rn!.txt) do echo %%b (!f!文件夹内随机读取的txt文本数据))>>1.txt
  9. )
  10. pause
复制代码

作者: 思想之翼    时间: 2014-6-15 04:39

回复 4# 522235677

210个文件夹的名称:001-210
每个文件夹内的文本名称:001-999

代码:
  1. @echo off & setlocal enabledelayedexpansion
  2. for /l %%a in (1 1 210) do (
  3.         if %%a lss 10 set f=00%%a
  4.         if %%a lss 100 (if %%a gtr 9 set f=0%%a) else (set f=%%a)
  5.         set /a rn=!random!%%999+1
  6.         if !rn! lss 10 set rn=00!rn!
  7.         if !rn! lss 100 if !rn! gtr 9 set f=0%%a
  8.         (for /f "delims=" %%b in (!f!\!rn!.txt) do echo %%b (!f!文件夹内随机读取的txt文本数据))>>1.txt
  9. )
  10. pause
复制代码
发生如下问题:
作者: Batcher    时间: 2014-6-15 10:11

回复 5# 思想之翼


        if %%a lss 10 set f=00%%a
        if %%a lss 100 (if %%a gtr 9 set f=0%%a) else (set f=%%a)
这两个if判断存在逻辑错误,你看看%%a等于1的时候,f被赋值成什么数字就知道了。
作者: Batcher    时间: 2014-6-15 10:16

回复 4# 522235677


使用 else if 结构,可以避免逻辑错误,并提高效率。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /l %%a in (1 1 210) do (
  4.     if %%a lss 10 (
  5.         set f=00%%a
  6.     ) else if %%a lss 100 (
  7.         set f=0%%a
  8.     ) else (
  9.         set f=%%a
  10.     )
  11.     set /a rn=!random!%%300+1
  12.     if !rn! lss 10 (
  13.         set rn=00!rn!
  14.     ) else if !rn! lss 100 (
  15.         set f=0%%a
  16.     )
  17.     for /f "delims=" %%b in (!f!\!rn!.txt) do (
  18.         echo %%b (!f!文件夹内随机读取的txt文本数据)
  19.     )
  20. ))>1.txt
复制代码

作者: 522235677    时间: 2014-6-15 15:54

回复 6# Batcher


    哦,是没想到这个问题。多谢纠正
作者: 思想之翼    时间: 2014-6-18 15:25

本帖最后由 思想之翼 于 2014-6-18 15:48 编辑

回复 7# Batcher

43 (006文件夹内随机读取的txt文本数据)
77 (007文件夹内随机读取的txt文本数据)
60 (018文件夹内随机读取的txt文本数据)
03 (030文件夹内随机读取的txt文本数据)
66 (034文件夹内随机读取的txt文本数据)
83 (035文件夹内随机读取的txt文本数据)
66 (062文件夹内随机读取的txt文本数据)
67 (065文件夹内随机读取的txt文本数据)
32 (076文件夹内随机读取的txt文本数据)
43 (080文件夹内随机读取的txt文本数据)
43 (095文件夹内随机读取的txt文本数据)
09 (097文件夹内随机读取的txt文本数据)
09 (119文件夹内随机读取的txt文本数据)
83 (132文件夹内随机读取的txt文本数据)
60 (146文件夹内随机读取的txt文本数据)
67 (149文件夹内随机读取的txt文本数据)
09 (151文件夹内随机读取的txt文本数据)
66 (164文件夹内随机读取的txt文本数据)
32 (171文件夹内随机读取的txt文本数据)
83 (173文件夹内随机读取的txt文本数据)
43 (195文件夹内随机读取的txt文本数据)
03 (198文件夹内随机读取的txt文本数据)
75 (201文件夹内随机读取的txt文本数据)
上述是001-210个文件夹、每个文件夹内有001-100个txt的随机取样,取样不全
要求是从001-210个文件夹内,分别提取任意一个txt,组合成一个210行的新文本txt
烦请帮助看看代码错在哪了。
作者: xxpinqz    时间: 2014-6-18 15:51

本帖最后由 xxpinqz 于 2014-6-18 15:57 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. set 文件数=100
  3. (for /l %%a in (1001 1 1210) do (
  4.     set /a rn=!random!%%文件数+1001,f=%%a
  5.     for /f "delims=" %%b in (!f:~-3!\!rn:~-3!.txt)do echo,%%b
  6. ))>new.txt
复制代码
  1. @echo off&setlocal enabledelayedexpansion
  2. set 文件数=20
  3. (for /l %%a in (1001 1 1210) do (
  4.     set /a rn=!random!%%文件数+101,f=%%a
  5.     for /f "delims=" %%b in (!f:~-3!\!rn:~-2!.txt)do echo,%%b
  6. ))>new.txt
复制代码
注意看下两个代码的2,4,5行的区别
7楼代码第15行
  1.         set f=0%%a
复制代码
改为
  1. set rn=0!rn!
复制代码





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