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

[文本处理] [已解决]批处理如何将文本中的三列内容左右对齐?

[复制链接]
发表于 2014-1-21 22:39:09 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-7-31 21:47 编辑

我想问下下面这段代码如何产生空格
http://www.bathome.net/redirect. ... =5932&ptid=1246
原文本:
111111111111111111111 98912 张三
222222222222222222 150020 李四四
333333333333333333333 360000 王五
444444444444444444 2332 赵六六
555555555555555555 222 田七
666666666666666666666 999999 舞吧

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2014-1-22 10:35:47 | 显示全部楼层
本帖最后由 apang 于 2014-1-22 18:19 编辑
  1. @echo off & Setlocal Enabledelayedexpansion
  2. set /a Max1=Max2=0
  3. for /f "tokens=1-3" %%i in (1.txt) do (
  4.     set /a n+=1
  5.     set "_!n!_1=%%i" & set "_!n!_2=%%j" & set "_!n!_3=%%k"
  6.     for %%a in (1 2) do (
  7.         for %%b in (!n!) do (
  8.             set "tmp=!_%%b_%%a!" & set "Len="
  9.             for %%c in (2048 1024 512 256 128 64 32 16) do (
  10.                 if "!tmp:~%%c!" neq "" (
  11.                     set /a Len+=%%c & set "tmp=!tmp:~%%c!"
  12.                 )
  13.             )
  14.             set "tmp=!tmp!fedcba9876543210"
  15.             set /a Len+=0x!tmp:~15,1! + 4
  16.             if !Len! gtr !Max%%a! set "Max%%a=!Len!"
  17.         )
  18.     )
  19. )
  20. for %%a in (1 2) do (
  21.     for /l %%b in (1 1 !Max%%a!) do set "sp%%a=!sp%%a! "
  22. )
  23. for /l %%a in (1 1 %n%) do (
  24.     for %%b in (1 2) do (
  25.         set "s=!_%%a_%%b!!sp%%b!"
  26.         for %%c in (!Max%%b!) do set "str=!str!!s:~,%%c!"
  27.     )
  28.     echo,!str!!_%%a_3!&set "str="
  29. )
  30. pause
复制代码
如果存在中英文混合的列,那就对不齐

评分

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

查看全部评分

 楼主| 发表于 2014-1-22 16:09:36 | 显示全部楼层
回复 2# apang


    我不是来找解决方法的而是来学习的,想问的是上面增加空格的那个方式:
set "ke2=!ke2!"

按逻辑不应该是 set "ke2= !ke2!"为什么它那样也能行得通?

你那段代码,我从第九行就开始晕了,你要是愿意解释的话我是很乐意听的。
发表于 2014-1-22 16:15:05 | 显示全部楼层
回复 2# apang
这里如果确认列数的话 应可忽略最后列的计算
发表于 2014-1-22 16:21:17 | 显示全部楼层
回复 3# BHsolve
如果这里KE2没有赋值
set "ke2= !ke2!"  等效于  set "ke2=!ke2! "
看你代码 你在前面已经赋值%%i于KE2
 楼主| 发表于 2014-1-22 16:27:48 | 显示全部楼层
回复 5# terse


  我眼睛拙计已经看明白哪里出问题了,谢谢两位了。
它的空格是加在后面的不是前面,郁闷
发表于 2014-1-22 17:36:06 | 显示全部楼层
回复 4# terse


    嗯,考虑不周,已修改
发表于 2014-1-22 17:39:46 | 显示全部楼层
回复 3# BHsolve


    二分法球字符串长度,你可以搜索下。可以减少循环次数,比call效率要高
发表于 2018-3-15 19:49:05 | 显示全部楼层
回复 2# apang

你好,请问
如果我要扩展到6列都要求左右对齐,该如何修改,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 06:03 , Processed in 0.034833 second(s), 13 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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