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

[文本处理] 批处理如何将以指定字符分割的多个字段按指定数目分行

[复制链接]
发表于 2013-12-19 15:10:39 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-8-15 16:15 编辑

批处理怎样把5个词分成一排?
文件1.txt里面的内容

a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z

现在要把5个词分成一排

a,b,c,d,e
f,g,h,i,j
k,l,m,n,o
p,q,r,s,t
u,v,w,x,y
z
这样可以实现吗?谢谢了!
发表于 2013-12-19 17:05:37 | 显示全部楼层
本帖最后由 battab 于 2013-12-19 17:07 编辑
  1. @echo off
  2. for /f %%i in (1.txt) do (
  3.                 set str=%%i
  4.                 setlocal enabledelayedexpansion
  5.                 echo !str:~0,9!>>2.txt
  6.                 echo !str:~10,9!>>2.txt
  7.                 echo !str:~20,9!>>2.txt
  8.                 echo !str:~30,9!>>2.txt
  9.                 echo !str:~40,9!>>2.txt
  10.                 echo !str:~50,9!>>2.txt
  11.                 endlocal )
复制代码
逗号要换成英文状态下输入的才行。
 楼主| 发表于 2013-12-19 17:20:12 | 显示全部楼层
回复 2# battab


    你这样不行!5个词分成1行,而不是固定字数分成一行。
发表于 2013-12-19 18:04:18 | 显示全部楼层
这种情况你要上传你的真实数据才行,你举例是没有用的。
发表于 2013-12-19 20:15:47 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (1.txt) do call :loop "%%a"
  3. pause
  4. exit/b0
  5. :loop
  6. for /f "tokens=1-5* delims=,," %%a in ("%~1") do (
  7.     set "str=%%a,%%b,%%c,%%d,%%e"
  8.     set str=!str:,,=!
  9.     if "!str:~-1!" == "," (
  10.        echo !str:~,-1!
  11.     ) else echo;!str!
  12.     call :loop "%%f"
  13. )
复制代码
发表于 2013-12-19 21:40:00 | 显示全部楼层
本帖最后由 PowerShell 于 2013-12-19 21:48 编辑

你可以参考这篇帖子  如何把txt文本内容每间隔37行加空行一次    http://www.bathome.net/thread-27948-1-1.html
powershell代码,需要powershell 3.0及以上版本,
win8,及以上无需安装
如果是win7,需要手动安装powershell 4.0,详见powershell版 的  2.0  3.0  4.0 安装置顶帖子
  1. Get-Content -Delimiter ',' aaa.csv -ReadCount 5|ForEach-Object { $_ -join ""} |out-file .\b.txt
复制代码
我win8.1测试通过
 楼主| 发表于 2013-12-21 11:00:03 | 显示全部楼层
1.txt的内容:

写完了,我,情绪,没有恢复,至今,打字,时候,还是习惯性,打出等字眼,这是一段难忘,日子,我喜欢这些人,君无悔,英雄,东方问心,执着,夜孤寒,深情,梅雪烟,雍容

想要得到的结果:(也就是每5个逗号分为一组)
写完了,我,情绪,没有恢复,至今,
打字,时候,还是习惯性,打出等字眼,这是一段难忘,
日子,我喜欢这些人,君无悔,英雄,东方问心,
执着,夜孤寒,深情,梅雪烟,雍容
发表于 2013-12-21 11:56:36 | 显示全部楼层
  1. @echo off
  2. set m=1&set n=5
  3. :aaa
  4. for /f "tokens=%m%-%n% delims=," %%a in ('type "1.txt"') do (
  5. set /a n+=5&set /a m+=5
  6. echo,%%a,%%b,%%c,%%d,%%e,
  7. goto :aaa
  8. )
  9. pause>nul
复制代码

评分

参与人数 1技术 +1 收起 理由
522235677 + 1 方法不错

查看全部评分

 楼主| 发表于 2013-12-21 12:19:30 | 显示全部楼层
回复 8# lifei259


    你这个很不错    那得到的结果能不能自动生成2.txt?
发表于 2013-12-22 13:41:51 | 显示全部楼层
回复 9# 598seo
  1. @echo off
  2. set m=1&set n=5
  3. :aaa
  4. for /f "tokens=%m%-%n% delims=," %%a in ('type "1.txt"') do (
  5. set /a n+=5&set /a m+=5
  6. echo,%%a,%%b,%%c,%%d,%%e,>>2.txt
  7. goto :aaa
  8. )
  9. pause>nul
复制代码
 楼主| 发表于 2014-1-8 12:51:57 | 显示全部楼层
回复 10# lifei259


    您好!谢谢您!但是这样分出来最多只有6行。但是我的词远远不止6行那么多。能帮我再做一下吗?感激涕零~!
发表于 2016-8-15 16:23:46 | 显示全部楼层
第三方
  1. gawk "gsub(/([^,,]*(,|,)){5}/,"^&\n")" "a.txt"|find /v ""
  2. pause
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-21 06:43 , Processed in 0.035692 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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