中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-07-29 13:06
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]怎样用bat对齐文本? 查看 5,641 回复 30
16 发表于 2006-12-14 02:59 ·  中国 河北 廊坊 三河市 移动
金牌会员
★★★★
积分 2,725
发帖 1,160
注册 2006-09-23 12:00
19年会员
UID 63486
来自 河北廊坊
状态 离线
求解:
无奈何兄,试过兄的代码,发现显示内容缺少第一行,不知何故?
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。
17 发表于 2006-12-14 03:23 ·  中国 浙江 宁波 鹏博士宽带
荣誉版主
★★★
积分 1,338
发帖 356
注册 2005-07-15 12:09
21年会员
UID 40733
性别 男
状态 离线
我这里没有问题啊,少了哪一行?
有点小问题,空行也会输出,修正一下。
  ☆开始\运行 (WIN+R)☆
%ComSpec% /cset,=何奈无── 。何奈可无是原,事奈无做人奈无&for,/l,%i,in,(22,-1,0)do,@call,set/p= %,:~%i,1%<nul&ping/n 1 127.1>nul

18 发表于 2006-12-14 03:31 ·  中国 河北 廊坊 三河市 移动
金牌会员
★★★★
积分 2,725
发帖 1,160
注册 2006-09-23 12:00
19年会员
UID 63486
来自 河北廊坊
状态 离线
新代码没有问题了!
请问增加if语句是什么意思?
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。
19 发表于 2006-12-14 03:43 ·  中国 广东 东莞 电信
银牌会员
★★★
积分 1,179
发帖 442
注册 2006-09-09 22:47
19年会员
UID 62249
状态 离线
Originally posted by youxi01 at 2006-12-14 01:18:
因为::在vbs中可以被认识(识别为换行),而rem却不能被vbs认识!


youxi01兄,我真不知有如此用法,但是我是把你的代码保存在BAT文件而非VBS文件中,我也曾试着保存到VBS中,但无法运行。这又是何故?
20 发表于 2006-12-14 04:03 ·  中国 广东 东莞 电信
银牌会员
★★★
积分 1,179
发帖 442
注册 2006-09-09 22:47
19年会员
UID 62249
状态 离线
Originally posted by youxi01 at 2006-12-13 08:03:
个人认为,纯粹的P很难实现,因为P很难判断变量的字节数,所以要借助于vbs。

::On Error Resume Next
echo ' > nul &cls & @echo off
echo ' > nul & ...



能否解释下在BAT中编写VBS脚本并运行的机理,一点都看不懂是怎么执行的,谢谢!
21 发表于 2006-12-14 04:03 ·  中国 浙江 宁波 鹏博士宽带
荣誉版主
★★★
积分 1,338
发帖 356
注册 2005-07-15 12:09
21年会员
UID 40733
性别 男
状态 离线
Originally posted by ccwan at 2006-12-14 03:31:
新代码没有问题了!
请问增加if语句是什么意思?

加上这条判断语句后,空行就不会输出了。小问题是空白行(只含有空格的行)还是会输出的,只需将 if(R != "") 改为 if(R != "") 能解决空白行的问题。
  ☆开始\运行 (WIN+R)☆
%ComSpec% /cset,=何奈无── 。何奈可无是原,事奈无做人奈无&for,/l,%i,in,(22,-1,0)do,@call,set/p= %,:~%i,1%<nul&ping/n 1 127.1>nul

22 发表于 2006-12-14 04:07 ·  中国 河北 廊坊 三河市 移动
金牌会员
★★★★
积分 2,725
发帖 1,160
注册 2006-09-23 12:00
19年会员
UID 63486
来自 河北廊坊
状态 离线
谢谢。
看来有必要学学了。
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。
23 发表于 2006-12-14 04:41 ·  中国 湖南 娄底 新化县 电信
银牌会员
★★★
积分 1,218
发帖 485
注册 2006-07-21 21:24
20年会员
UID 58987
来自 湖南.娄底
状态 离线
zg159兄和无奈何兄的代码精彩, 更通用. 而用文件大小判断字节数是更为省事的方法.

当时分析楼主给的三行代码, 初步得到规律写的代码自然不能计算中文字符的英文字符的字节差别. 也想用文件大小判断, 出于对生成临时文件的敏感, 故只针对1F三行代码做处理.

而除了zh159兄8F用文件大小判断字节数外还有其他方法, 不用生成临时文件. 但效率会很低, 为了扩展思路, 熟悉不同的算法, 大家可以尝试使用下面的算法实现对中文汉字和英文字符的判断.

一、用for列举出要匹配的字符, 一旦匹配成功, num+1。

二、FOR循环执行完毕, 开关如没关闭则判断其为汉字,故num+2。

三、整个嵌套循环执行完毕, 计算num的值进行空格填充。

希望大家能写出更加精彩的代码,用灵活的思路,更先进的算法,弥补P处理脚本功能上的不足, 带动本论坛的发展^_^
业精于勤而荒于嬉,形成于思而毁于随。
24 发表于 2006-12-14 04:42 ·  中国 广东 清远 联通
高级用户
★★
积分 846
发帖 247
注册 2006-10-27 12:03
19年会员
UID 68504
性别 男
来自 湖南==》广东
状态 离线
Originally posted by HUNRYBECKY at 2006-12-14 03:43 AM:


youxi01兄,我真不知有如此用法,但是我是把你的代码保存在BAT文件而非VBS文件中,我也曾试着保存到VBS中,但无法运行。这又是何故?


一定要保存为bat文件,因为它是针对P处理的!
25 发表于 2006-12-14 04:46 ·  中国 广东 清远 联通
高级用户
★★
积分 846
发帖 247
注册 2006-10-27 12:03
19年会员
UID 68504
性别 男
来自 湖南==》广东
状态 离线
Originally posted by HUNRYBECKY at 2006-12-14 04:03 AM:



能否解释下在BAT中编写VBS脚本并运行的机理,一点都看不懂是怎么执行的,谢谢!


在P处理中,会忽略::打头的行(认为是解释语句),而当它作为vbs运行时,却可以被识别;同时,在vbs中,会认为 ' 后面的内容为注释内容......

参看:http://www.cn-dos.net/forum/viewthread.php?tid=25333&fpage=1&highlight=%E8%AF%86%E8%B4%A7&page=1
26 发表于 2006-12-14 05:37 ·  中国 甘肃 平凉 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
20年会员
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
还是awk的效果好觉得
27 发表于 2008-05-13 11:10 ·  中国 山东 烟台 联通
新手上路
积分 4
发帖 2
注册 2006-10-27 03:29
19年会员
UID 68440
性别 男
状态 离线
Originally posted by youxi01 at 2006-12-13 08:03 AM:
个人认为,纯粹的P很难实现,因为P很难判断变量的字节数,所以要借助于vbs。

::On Error Resume Next
echo ' > nul &cls & @echo off
echo ' > nul & ...


上面的例子是4列,如果是5列、6列怎样写?
最后怎样输出到文档?
我是菜鸟!谢谢!
28 发表于 2008-05-21 10:23 ·  中国 山东 烟台 联通
新手上路
积分 4
发帖 2
注册 2006-10-27 03:29
19年会员
UID 68440
性别 男
状态 离线
ding!顶到出答案为止!!
29 答案: 发表于 2008-05-21 10:48 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
因论坛处理不了TAB,请运行前将!str!后面的空格改为TAB。

@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (a.txt) do (
for %%a in (%%i) do call set str=!str! %%a
echo !str:~1!&set str=
)
pause>nul
批处理之家新域名:www.bathome.net
30 29 楼 发表于 2008-05-21 11:46 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
zw19750516 兄想简单了。
先测试以下代码
@echo off
echo aaaaaaa bbbbbbbbb
echo aaaaaaaa bbbbbbbbb
echo aaaaaaaaaaaaaaaaa bbbbbbbbb
pause

更何况是中英文混合的。。。。。。。。。。
致精致简!
论坛跳转: