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

[文本处理] 【已解决】批处理写入txt文本如何让每行两部分文字左右都对齐

[复制链接]
发表于 2013-8-26 02:32:28 | 显示全部楼层 |阅读模式
本帖最后由 Lumiere 于 2013-8-26 22:10 编辑

RT,不知道有没有简单的批处理脚本能够实现输入的文字在txt文本视图中成左右都对齐?
比如一般用重定向写入文本都是在左边的,随便举个例子
  1. for /l %%a in (1 1 10) do echo www.bathome.net   %%a>>1.txt
复制代码
代码执行后生成十行,因为每行文字很短,所以都排在左边对齐,左边的www.bathome.net部分内容不定,长短不一,也不是由上面代码生成的,只是举个例子。如果存在好几列的情况下怎么让左边左对齐,而数字右边对齐,应该怎么写代码呢?我想应该批处理脚本是可以实现的吧?如果不行的话应该怎么办呢?

评分

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

查看全部评分

发表于 2013-8-26 09:46:56 | 显示全部楼层
写脚本,在两个字符串中间插入经过计算的空格数量吧,
或者把文本导入excel。这种方法分两步走,
1 制作excel模版文件
2 向excel表写入数据。
这两步都可以用powershell实现。不过,一般只用powershell向excel写数据,而excel模版可以手动做。
 楼主| 发表于 2013-8-26 12:04:25 | 显示全部楼层
回复 2# PowerShell


  版主你太厉害了,我只会一些比较简单的bat脚本,你说计算空格这个算懂,但是因为每一行不一样,我给的例子每行都是www.bathome.net,而实际要排版的文本内容很不一样有长有短,但是都占不到一行,所以这个空格就无法统一了。不知道代码如何实现?还有,用批处理可以把文本导入excel文件吗?如果可以能不能告诉我怎么弄呢?
发表于 2013-8-26 13:49:41 | 显示全部楼层
  1. @echo off
  2. >1.csv echo www.bathome.net
  3. >>1.csv echo 2013
  4. >>1.csv echo www
  5. >>1.csv echo 8
  6. >>1.csv echo bathome
  7. >>1.csv echo 26
  8. >>1.csv echo net
复制代码
 楼主| 发表于 2013-8-26 14:20:53 | 显示全部楼层
回复 4# DAIC


    你这个批处理用到其他脚本了吗?前面的1.cvs看不懂
发表于 2013-8-26 14:39:30 | 显示全部楼层
我只会一些比较简单的bat脚本,大多数问题我都用powershell解决。
逻辑如下,
1 取一行
2 把多个空格替换成1个空格
3 把这行按空格,切割成一个数组
4 统计数组中每个元素的长度,求和
5 每列要插入的空格数 =(行长度 - 上述列长度和) / (列 - 1 )
数组元素1  + 每列要插入的空格 + 数数组元素2  + 每列要插入的空格数 等等

可以用powershell向excel写数据

评分

参与人数 1技术 +1 收起 理由
Lumiere + 1 在网上找到简洁代码了,还是感谢你耐心作答 ...

查看全部评分

发表于 2013-8-26 14:43:44 | 显示全部楼层
回复 5# Lumiere


    保存为bat文件,执行。它会生成一个文件叫做1.csv,双击这个文件,默认会用Excel打开。
发表于 2013-8-26 16:33:38 | 显示全部楼层
不知你每一列都对齐 还是就最后列对齐
  1. @echo off&setlocal enabledelayedexpansion
  2. set /a len=n=0
  3. for /f "delims=" %%i in (test.txt) do (
  4.             set s=%%i&set /a n+=1,m=0
  5.         for %%j in (%%i)  do (
  6.                 set s=%%j&set /a _len=1,m+=1
  7.                 for %%j in (256 128 64 32 16 8 4 2 1) do (
  8.                         if "!s:~%%j!" neq "" set /a _len+=%%j&set "s=!s:~%%j!"
  9.                 )
  10.                 for %%k in (!m!) do if !len%%k! lss !_len! set len%%k=!_len!
  11.                 set $!n!_!m!=%%j
  12.                 if !len! lss !_len! set len=!_len!
  13.         )
  14.         set #!n!=!m!
  15. )

  16. for /L %%i in (1,1,!len!) do set "k= !k!"
  17. for /L %%i in (1,1,!n!) do (
  18.         set "str="
  19.         for /L %%j in (1,1,!#%%i!) do (
  20.                 for %%k in (!len%%j!) do (
  21.                         if %%j neq 1 (
  22.                                 set "s=!k!!$%%i_%%j!"
  23.                                 set "str=!str! !s:~-%%k!"

  24.                         ) else (
  25.                                 set "s=!$%%i_%%j!!k!"
  26.                                 set "str=!str! !s:~,%%k!"
  27.                         )
  28.                 )
  29.         )
  30.         echo!str!
  31. )
  32. pause
复制代码

评分

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

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 15:24 , Processed in 0.020205 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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