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

[文本处理] BAT文本处理——排版求助

[复制链接]
发表于 2012-12-22 13:31:13 | 显示全部楼层 |阅读模式
现有如下格式文本文件x.txt

=================================================================================
项目1 项目2 项目3 项目4 ..... 项目14
xxxx(对应项目1) xxxxxxxxxx(对应项目2) xxx(对应项目3) xxxxxxxxxxxxxxxxxxxxxx(对应项目4) ......(对应项目14)
xxxxxxx(对应项目1) xxx(对应项目2) xxxx.....................(对应项目n)
很多行....
==================================================================================
我想写一个批 当我拖动x.txt到批上 生成新文件 已整理x.txt
格式如下:

=================================================================================
项目a                                     项目b                                     项目c                          项目d                                      .....                             项目14
xxxx (对应项目1)                    xxxxxxxxxxxxxx                    xxx                             xxxxxxxxxxxxxxxxxxxxxx       .....                             xxxx
xx(对应项目1)                         xxxxxxxxxxxx                        xxxxxxxx                    xxxxxxxxx                              ....                              ....
...
...
很多行.....
=================================================================================
每一行有14个项目 没一个项目下对应的最长字符长度我这也有 就是不知道怎么写这个批
项目1 5个字符长度  项目2 8个字符长度等等
求教了。还需要了解哪些信息随时来问。
发表于 2012-12-22 13:50:37 | 显示全部楼层
项目最长字符多少  如8个字符以内可考虑TAB键入
 楼主| 发表于 2012-12-22 13:56:09 | 显示全部楼层
回复 2# terse


    最长的超过8个字符了 但只有一个项目超过8个字符了
发表于 2012-12-22 14:58:48 | 显示全部楼层
回复 3# silience
能确定那一项 超过8字符 可否准确字符数 记住一个TAB键针对8字符
发表于 2012-12-22 19:16:38 | 显示全部楼层
用,做分隔符输出为csv文件,轻松解决。。。
发表于 2012-12-23 02:54:32 | 显示全部楼层
本帖最后由 CrLf 于 2012-12-23 04:43 编辑

一直想用一次 more 命令的 /t 开关,终于让我碰上了,邪恶:
  1. @echo off&setlocal enabledelayedexpansion
  2. set "文件名前缀=test_"
  3. ::上面这行设置处理后的文件所使用的前缀为 test_,如果无需前缀就删掉这行
  4. set "制表符=        "
  5. ::这句设置制表符变量为制表符,如果被论坛处理为空格,请自行替换(建议不要选中复制,而使用复制代码可保留代码中的制表符)
  6. set "分隔符=@"
  7. ::这句设置临时的列分隔符为 @,可视情况设置为其他不存在于文本中的字符
  8. for %%a in (20 30 50 40 20) do set /a n+=1,m+=%%a&set "项目!n!=!m!"
  9. ::这句设置各个项目的长度,如例 20、30、50、40、20 分别对应5列(或6列的前五列)
  10. set /a n-=1

  11. setlocal disabledelayedexpansion
  12. (for /f "delims=" %%a in ("%~1
  13. ) do (
  14.         set "str=%%a"
  15.         setlocal enabledelayedexpansion
  16.         echo !str: =%分隔符%!
  17.         endlocal
  18. ))>$1
  19. ::将文本中的空格处理为 @,用于逐列处理时加以区分

  20. for /l %%a in (1 1 %n%) do (
  21.         (for /f "tokens=1* delims=%分隔符%" %%b in ($1) do echo %%b%制表符%%%c)>$2

  22.         setlocal enabledelayedexpansion
  23.         more>$1 /t!项目%%a! $2
  24.         endlocal
  25. )
  26. endlocal
  27. ::逐列将分隔符替换为制表符,再用 more /tn 将制表符处理为一定长度的空格

  28. (move $1 "%~dp1%文件名前缀%%~nx1"&del $2)>nul
  29. ::收工
  30. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
batman + 1 乐于助人

查看全部评分

发表于 2012-12-25 15:56:04 | 显示全部楼层
回复 6# CrLf


    这都想得出,我不得不说你的确是个有才的骚年。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 20:30 , Processed in 0.021333 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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