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

[文本处理] 【已解决】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如何写?
1

评分人数

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

本帖最后由 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
复制代码
1

评分人数

TOP

回复 2# 522235677

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

TOP

回复 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
复制代码
1

评分人数

TOP

回复 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
复制代码
发生如下问题:

TOP

回复 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被赋值成什么数字就知道了。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 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
复制代码
1

评分人数

我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 6# Batcher


    哦,是没想到这个问题。多谢纠正

TOP

本帖最后由 思想之翼 于 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
烦请帮助看看代码错在哪了。

TOP

本帖最后由 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!
复制代码
1

评分人数

初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

返回列表