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

[文本处理] [已解决]给每行加上标点并使其对齐的批处理

如有下面不同长度的文字,要给每行结尾都加上逗号,且逗号对齐,如何写bat.谢谢!

输入:
asdgasdgd
asdfasdgsdgag
asdgsg

输出:
asdgasdgd       ,
asdfasdgsdgag,
asdgsg             ,

[ 本帖最后由 rustnail 于 2009-8-9 14:29 编辑 ]
1

评分人数

    • batman: 感谢主动给标题标注[已解决]字样PB + 2

谢谢大家!谢谢大家!

TOP

修改下 batman兄 6楼代码
用最大行字数减当前行字数 处理怎么样
另type 改为 more 省了最后行问题
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1* delims=:" %%i in ('"(more "a.txt"&echo;)|findstr /o .*"') do (
  3.    set /a n=%%i-2-m,m=%%i
  4.    if !n! gtr !c! set c=!n!
  5.    if defined var set _!l!=!var!&set l!l!=!n!
  6.    if not "%%j"=="" (set "var=%%j"&set/a l+=1)else set "var="
  7. )
  8. for /l %%a in (1,1,%c%) do set "k=!k! "
  9. (for /l %%a in (1,1,%l%) do (
  10.     set /a m=c-l%%a
  11.     if "!_%%a!" neq "" for %%b in (!m!) do echo !_%%a!!k:~,%%b!,
  12. ))>new.txt
  13. start new.txt
复制代码

[ 本帖最后由 terse 于 2009-8-9 12:53 编辑 ]
1

评分人数

TOP

双击执行没有问题,但是cmd执行就不行了

TOP

原帖由 batman 于 2009-8-9 01:15 发表
如果知道最长字符数,如:最长字符为20个就很好处理:@echo off&setlocal enabledelayedexpansion
for /l %%a in (1,1,20) do set "k=!k! "
for /f "delims=" %%a in (a.txt) do (
    set "str=%%a%k%"
    ech ...


还是有点问题:为什么会有!k!?

iojoj!k!  ,
llgajslg!k,
lasjdglasj,
ljgas!k!  ,
gsdfh!k!  ,
lasdhglsjg,
fasdgtt!k!,
fjdfj!k!  ,
qawq!k!   ,
sdfghsdh!k,
segsegs!k!,
gdfgd!k!  ,
dhgd!k!   ,

TOP

问题得到解决后,请楼主主动在标题上加注[已解决]字样,谢谢。
***共同提高***

TOP

呵呵,已经不是批处理了

TOP

找max column number的另外一种方法
awk "length>max{max=length}END{print max}" a.txt

TOP

还可以不要改动原文件,但代码就难懂点了:
  1. @echo off&setlocal enabledelayedexpansion
  2. set /a max=0
  3. for /f "delims=:" %%a in ('^(type a.txt^&echo a^)^|findstr /o .*') do (
  4.      set /a b=a,a=%%a,c=a-b-2
  5.      if !max! leq !c! set /a max=c
  6. )
  7. for /l %%a in (1,1,%max%) do set "k=!k! "
  8. for /f "delims=" %%a in (a.txt) do (
  9.     set "str=%%a%k%"
  10.     echo !str:~,%max%!,>>new.txt
  11. )
  12. start new.txt
复制代码
***共同提高***

TOP

如果不知道最长字符数,就要先获取最长字符数,这就麻烦点了:
  1. @echo off&setlocal enabledelayedexpansion
  2. echo a>>a.txt&set /a max=0
  3. for /f "delims=:" %%a in ('findstr /o .* a.txt') do (
  4.      set /a b=a,a=%%a,c=a-b-2
  5.      if !max! leq !c! set /a max=c
  6. )
  7. for /l %%a in (1,1,%max%) do set "k=!k! "
  8. for /f "delims=" %%a in (a.txt) do (
  9.     set "str=%%a%k%"
  10.     echo !str:~,%max%!,>>new.txt
  11. )
  12. start new.txt
复制代码
***共同提高***

TOP

呵呵,感谢提供了很好的思路,现在只要取出最长的列号就可以了

TOP

谢谢!

希望逗号能够紧跟在最长的一列后面,而不是固定在某一列。呵呵

TOP

如果知道最长字符数,如:最长字符为20个就很好处理:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%a in (1,1,20) do set "k=!k! "
  3. for /f "delims=" %%a in (a.txt) do (
  4.     set "str=%%a%k%"
  5.     echo !str:~,20!,>>new.txt
  6. )
  7. start new.txt
复制代码
***共同提高***

TOP

返回列表