中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-05 22:22
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已解决]把文本里每行不足5位的编号,前面加0补够5位 查看 1,149 回复 13
楼 主 [已解决]把文本里每行不足5位的编号,前面加0补够5位 发表于 2007-09-26 11:58 ·  中国 广东 东莞 电信
初级用户
★★
积分 136
发帖 57
注册 2007-09-08 11:11
18年会员
UID 96854
性别 男
状态 离线
文本里原内容有些行不足5位,想找个批处理把不足5位的,前面加0补足5位.如下面把左边改为右边那样子

123 >>>>> 00123

66 >>>>> 00066

12546 >>>>> 12546

99 >>>>> 00099

..... ........... .....

8 >>>>> 00008

第2,7,8,9楼的方法都可以用,谢谢

[ Last edited by userwww on 2007-9-26 at 10:45 PM ]
2 use sed 发表于 2007-09-26 12:19 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线
sed "/^$/!{s/^/00000/;s/0*\(.\{5,\}\)$/\1/}" yourdatafile.ext
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
userwww +2 2007-09-26 22:09
3 发表于 2007-09-26 12:23 ·  中国 北京 广电网
初级用户
★★
积分 128
发帖 59
注册 2007-09-15 23:03
18年会员
UID 97496
性别 男
状态 离线
我又晕,哈哈
4 发表于 2007-09-26 12:25 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线
Originally posted by yoyodos at 2007-9-26 12:23:
我又晕,哈哈

晕什么?
不好意思,不会用批处理写.
5 发表于 2007-09-26 12:37 ·  中国 广东 东莞 电信
初级用户
★★
积分 136
发帖 57
注册 2007-09-08 11:11
18年会员
UID 96854
性别 男
状态 离线
谢谢版主,我试了,好象文本没反应,不知我哪里搞错了,
我是把你那行命令新建一个批处理来运行的
6 发表于 2007-09-26 13:12 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线
RE userwww:
你直接在命令行运行,需要保存文件就重定向一下。
7 发表于 2007-09-26 13:34 ·  中国 天津 电信
银牌会员
★★★
积分 1,928
发帖 931
注册 2007-01-06 11:46
19年会员
UID 75624
性别 男
状态 离线
@echo off
for /f "delims=" %%i in (test.txt) do (
set str=%%i
call set str=0000%%str%%
call echo %%str:~-5%%>>test1.txt
)
pause
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
userwww +2 2007-09-26 22:09
8 发表于 2007-09-26 14:30 ·  中国 北京 广电网
初级用户
★★
积分 128
发帖 59
注册 2007-09-15 23:03
18年会员
UID 97496
性别 男
状态 离线

@echo off
setlocal enabledelayedexpansion
cd.>new.txt
for /f "delims=" %%a in (a.txt) do (
set s=%%a
for /l %%i in (0,1,4) do (
set/a m=%%i
set "c=!s:~%%i,1!"
if "!c!"=="" (
set/a n=5-!m!
for /l %%k in (1,1,!n!) do (
set s=0!s!
)
)
)
echo !s! >> new.txt
)
pause
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
userwww +2 2007-09-26 22:09
9 发表于 2007-09-26 15:49 ·  中国 江苏 常州 武进区 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
@echo off&setlocal EnableDelayedExpansion
for /f "delims=" %%a in (test.txt) do (
set mmm=%%a
call :start
)
pause
goto :eof
:start
for /l %%i in (0,1,10) do if "!mmm:~%%i,1!"=="" set len=%%i && goto :123
:123
if !len! leq 6 set mmm=0!mmm!
if !len! leq 6 goto start
echo !mmm!>>test2.txt
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
userwww +2 2007-09-28 18:27
10 发表于 2007-09-26 18:44 ·  中国 广东 东莞 电信
初级用户
★★
积分 136
发帖 57
注册 2007-09-08 11:11
18年会员
UID 96854
性别 男
状态 离线
二楼的方法可以用,原来我的机子上没有SED,找了半天终于搞清楚了
11 发表于 2007-09-26 22:09 ·  中国 广东 东莞 电信
初级用户
★★
积分 136
发帖 57
注册 2007-09-08 11:11
18年会员
UID 96854
性别 男
状态 离线
谢谢楼上的热心人,今天看了很久关于sed的话题,经测试第2,7,8,9楼的方法都可以用,谢谢.:P
12 发表于 2007-09-26 23:22 ·  中国 江苏 常州 武进区 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
7楼的处理 如果内容超出6位 取后5位吧.
13 发表于 2007-09-28 20:52 ·  中国 广东 东莞 电信
初级用户
★★
积分 136
发帖 57
注册 2007-09-08 11:11
18年会员
UID 96854
性别 男
状态 离线
Originally posted by terse at 2007-9-26 11:22 PM:
7楼的处理 如果内容超出6位 取后5位吧.


如果超过5位,是取后五位
14 发表于 2007-10-01 13:19 ·  中国 山东 青岛 联通
初级用户
★★
积分 146
发帖 86
注册 2007-10-01 11:27
18年会员
UID 98691
性别 男
状态 离线
dddddddddddddddddd
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
wudixin96 -3 2007-10-01 13:21
论坛跳转: