中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-07-04 18:29
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 难题:对文本中所有数值加1 查看 782 回复 7
楼 主 难题:对文本中所有数值加1 发表于 2008-04-18 20:28 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
a.txt内容如下:
36d5c496a5863f4f4572d1z69
456-d_fhs234f123hi7459213
gh53176ffsfj_74824535-fj4

要求通过批处理生成b.txt内容如下,即对a.txt中所有数值加1(满10归0),但其它的不变:
47d6c507a6974f5f5683d2z70
567-d_fhs345f234hi8560324
gh64287ffsfj_85935646-fj5

注:并不知道任一字符串的长度

[ Last edited by zw19750516 on 2008-4-18 at 08:32 PM ]
批处理之家新域名:www.bathome.net
2 我先来抛砖吧: 发表于 2008-04-18 20:31 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
@echo off
for /f "delims=" %%i in (a.txt) do set v=0&set m=0&set n=-1&set a=%%i&call :lp %%a%%
start b.txt
goto :eof
:lp
set /a n+=1
call,set var=%%a:~%n%,1%%
if "%var%"=="" set m=1
for %%i in (0,1,2,3,4,5,6,7,8,9,) do if "%var%"=="%%i" set /a v+=1
if %v% gtr 0 set /a var+=1
if "%var%"=="10" set var=0
set str=%str%%var%
if %m% neq 1 set v=0&goto lp
echo %str%>>b.txt
set str=&goto :eof


[ Last edited by zw19750516 on 2008-4-18 at 09:11 PM ]
批处理之家新域名:www.bathome.net
3 发表于 2008-04-18 21:00 ·  中国 江苏 常州 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (a.txt) do set "str=%%i"& call:lp
pause
goto :eof
:lp
if defined str (
set str1=!str:~0,1!
for %%i in (0 1 2 3 4 5 6 7 8 9) do if "!str1!"=="%%i" set/a str1+=1&goto :lp1
:lp1
set str2=!str2!!str1:~-1!
set str=!str:~1!
goto lp
)
echo !str2!
set str2=
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
moniuming +4 2008-04-18 21:55
简单!简单!再简单!
4 发表于 2008-04-18 21:15 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线

@echo off
for /l %%a in (0 1 9) do set _%%a=a
for /f "delims=" %%a in (a.txt) do (
set str=%%a&set "num="&echo %%a
call :loop
call echo %%num%%&echo.
)
pause
:loop
if not defined str goto :eof
set var=%str:~0,1%
if defined _%var% set /a var+=1
set str=%str:~1%
set num=%num%%var:~-1%
goto loop
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
bat-zw +8 2008-04-18 21:23
致精致简!
5 发表于 2008-04-18 21:17 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
18年会员
UID 115804
性别 男
状态 离线
高!竟然有这招,判断str的值是否为空
请教一下 最后set str2=是什么意思? 如果去掉 会显示
47d6c5107a6974f5f5683d2z710
47d6c5107a6974f5f5683d2z710 567-d_fhs345f234hi85610324
47d6c5107a6974f5f5683d2z710 567-d_fhs345f234hi85610324 gh64287ffsfj_85935646-fj5
6 发表于 2008-04-18 21:25 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
Originally posted by 26933062 at 2008-4-18 21:15:

@echo off
for /l %%a in (0 1 9) do set _%%a=a
for /f "delims=" %%a in (a.txt) do (
set str=%%a&set "num="&echo %%a
call :loop
call echo %%num%%& ...

再次折服于兄弟,学习!!!
批处理之家新域名:www.bathome.net
7 发表于 2008-04-18 21:32 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
Originally posted by pusofalse at 2008-4-18 21:17:
高!竟然有这招,判断str的值是否为空
请教一下 最后set str2=是什么意思? 如果去掉 会显示
47d6c5107a6974f5f5683d2z710
47d6c5107a6974f5f5683d2z710 567-d_fhs345f234 ...

set str=就是清空变量str以便下一次的追加赋值。
批处理之家新域名:www.bathome.net
8 发表于 2008-04-18 21:43 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
18年会员
UID 115804
性别 男
状态 离线
谢谢!又学到了新东西~
论坛跳转: