中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]如何对文本中的每个字符加1?
« [1] [2] »
作者:
标题: [求助]如何对文本中的每个字符加1? 上一主题 | 下一主题
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『楼 主』:  [求助]如何对文本中的每个字符加1?

a.txt
peh9a7cygxm91
3c2gjm05ba3gz
epkvkojd92023


字母也要加1
输出后为:
qfi0b8dzhyn02
4d3hkn16cb4ha
fqlwlpke03134

当前数字加1。。。 当前字母向后移一位
根据zw19750516 前辈以前的帖子想出的一个问题,想了2天没想出来,请教各位达人!
付a.txt生成代码:
@echo off
set str=0123456789abcdefghijklmnopqrstuvwxyz
:1
set/a n=%random%%%36
call set var=%%str:~%n%,1%%
set str1=%str1%%var%
set/a m+=1
if %m% lss 13 goto 1
echo %str1%>>a.txt
set m=
set str1=
set /a y+=1
if %y% lss 3 goto 1
pause




心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
2008-5-18 15:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 2 楼』:  


@echo off&setlocal enabledelayedexpansion
set "num=abcdefghijklmnopqrstuvwxyza"
for /l %%l in (0 1 25) do (
   set /a max=%%l+1
   call set "var=%%num:~!max!,1%%"
   set "_!num:~%%l,1!=!var!"
   set "_%%l=!max!"
)
for /f "delims=" %%a in (a.txt) do (
   set "str=%%a"
   call echo !str:~0,-1!%%_!str:~-1!%%
)
pause




致精致简!
2008-5-18 16:36
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『第 3 楼』:  



  Quote:
Originally posted by 26933062 at 2008-5-18 04:36 PM:
[code]
@echo off&setlocal enabledelayedexpansion
set "num=abcdefghijklmnopqrstuvwxyza"
for /l %%l in (0 1 25) do (
   set /a max=%%l+1
   call set "var=%%num:~!max!,1%%" ...

遗憾。。。。代码有误。。。只能对每行最后的字符加1



心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
2008-5-18 16:40
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 4 楼』:  

你不是要求最后一个字符加一吗?



致精致简!
2008-5-18 16:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 5 楼』:  

开始看错题了。
:
@echo off&setlocal enabledelayedexpansion
set "num=abcdefghijklmnopqrstuvwxyza"
for /l %%l in (0 1 25) do (
   set /a max=%%l+1
   call set "var=%%num:~!max!,1%%"
   set "_!num:~%%l,1!=!var!"
   set "_%%l=!max!"
)
for /f "delims=" %%a in (a.txt) do (
   set "str=%%a"
   call :loop
   echo.
)
pause
:loop
set /p= !_%str:~0,1%!<nul
set str=!str:~1!
if defined str goto loop
goto :eof


   此帖被 +4 点积分        点击查看详情   
评分人:【 moniuming 分数: +4  时间:2008-5-19 15:47




致精致简!
2008-5-18 16:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『第 6 楼』:  



  Quote:
Originally posted by 26933062 at 2008-5-18 04:47 PM:
开始看错题了。
:[code]
@echo off&setlocal enabledelayedexpansion
set "num=abcdefghijklmnopqrstuvwxyza"
for /l %%l in (0 1 25) do (
   set /a max=%%l+1
   call set "v ...

看着有点头晕。。。 赞佩!



心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
2008-5-18 17:08
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 7 楼』:  

楼主是想用这个方法进行替换加密吗?



2008-5-18 17:50
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『第 8 楼』:  



  Quote:
Originally posted by HAT at 2008-5-18 05:50 PM:
楼主是想用这个方法进行替换加密吗?

没这样想过。。。做这题只是练习一下而已。。。
但用这种方法加密的确不失为一种加密方法,密码学上也有这种加密方式 ^_^



心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
2008-5-18 19:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 9 楼』:  我也来一个:


@echo off&setlocal enabledelayedexpansion
set code=abcdefghijklmnopqrstuvwxyz0123456789&set n=1
:begin
set _%n%=%code:~,1%&set code=%code:~1%
set /a n+=1
if defined code goto begin
for /f "delims=" %%i in (a.txt) do set n=1&set var=&set str=%%i&call :lp
pause>nul&goto :eof
:lp
set a=%str:~,1%&set str=%str:~1%
if %a% equ z set _%b%=a&goto echo
if %a% equ 9 set _%b%=0&goto echo
for /l %%i in (1,1,36) do if "!_%%i!"=="%a%" set b=%%i&set /a b+=1&goto echo
set /a n+=1
:echo
set var=%var%!_%b%!
if defined str goto lp
echo %var%




批处理之家新域名:www.bathome.net
2008-5-19 12:35
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 10 楼』:  



  Quote:
Originally posted by 26933062 at 2008-5-18 16:47:
开始看错题了。
:[code]
@echo off&setlocal enabledelayedexpansion
set "num=abcdefghijklmnopqrstuvwxyza"
for /l %%l in (0 1 25) do (
   set /a max=%%l+1
   call set "v ...

测试结果不正确,少了10的判断。



批处理之家新域名:www.bathome.net
2008-5-19 12:42
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 11 楼』:  

测试文本a.txt
code         name
12            ali
13            sam
14            jim
5楼的运行结果

  Quote:
F:\test\test3>test
dpefobnf
23bmj
24tbn
25kjn
请按任意键继续. . .

9楼的运行结果:

  Quote:
F:\test\test3>test1
此时不应有 z。



2008-5-19 13:13
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 12 楼』:  



  Quote:
Originally posted by zw19750516 at 2008-5-19 12:42:

测试结果不正确,少了10的判断。

没注意,
再第一个for结束后,加一句 set _9=0  就可以了。



致精致简!
2008-5-19 14:09
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 13 楼』:  



  Quote:
Originally posted by moniuming at 2008-5-19 13:13:
测试文本a.txt
code         name
12            ali
13            sam
14            jim
5楼的运行结果

9楼的运行结果:

开始没考虑空格,修改如下:
@echo off&setlocal enabledelayedexpansion
set code=abcdefghijklmnopqrstuvwxyz0123456789&set n=1
:begin
set _%n%=%code:~,1%&set code=%code:~1%
set /a n+=1
if defined code goto begin
for /f "delims=" %%i in (a.txt) do set n=1&set var=&set str=%%i&call :lp
pause>nul&goto :eof
:lp
set a=%str:~,1%&set str=%str:~1%
if "%a%"=="z" set _%b%=a&goto echo
if "%a%"=="9" set _%b%=0&goto echo
if "%a%"==" " set _%b%= &goto echo
for /l %%i in (1,1,36) do if "!_%%i!"=="%a%" set b=%%i&set /a b+=1&goto echo
:echo
set var=%var%!_%b%!
if defined str goto lp
echo %var%
ps:如文本中有特殊字符,则批处理根本做不到这一点了(对所有字符+1)。

[ Last edited by zw19750516 on 2008-5-19 at 03:39 PM ]

   此帖被 +4 点积分        点击查看详情   
评分人:【 moniuming 分数: +4  时间:2008-5-19 15:46




批处理之家新域名:www.bathome.net
2008-5-19 15:33
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 14 楼』:  回 13 楼

13 楼代码测试有漏掉字符的现象,不知是否我测试有误。
@echo off&setlocal enabledelayedexpansion
set "num=abcdefghijklmnopqrstuvwxyza"
for /l %%l in (0 1 25) do (
   set /a max=%%l+1
   call set "var=%%num:~!max!,1%%"
   set "_!num:~%%l,1!=!var!"
   set "_%%l=!max!"
)
set _9=0
for /f "delims=" %%a in (a.txt) do set "str=%%a"&call :loop
pause
:loop
if "%str:~0,1%"==" " (set /p= <nul) else set /p= !_%str:~0,1%!<nul
set "str=!str:~1!"
if defined str goto loop
echo.&goto :eof




致精致简!
2008-5-19 17:30
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 15 楼』:  



  Quote:
Originally posted by 26933062 at 2008-5-19 17:30:
13 楼代码测试有漏掉字符的现象,不知是否我测试有误。

确实是的,感谢指正,修改如下:
@echo off&setlocal enabledelayedexpansion
set code=abcdefghijklmnopqrstuvwxyz0123456789
:begin
set /a n+=1
set _%n%=%code:~,1%&set code=%code:~1%
if defined code goto begin
for /f "delims=" %%i in (a.txt) do set str=%%i&call :lp
pause>nul&goto :eof
:lp
set a=%str:~,1%&set str=%str:~1%&set n=0
if "%a%"=="z" set a=a&goto echo
if "%a%"=="9" set a=0&goto echo
if "%a%"==" " set a= &goto echo
for /l %%i in (1,1,36) do (
    set /a n+=1
    if "!_%%i!"=="%a%" set /a n+=1&goto echo
)
:echo
if %n% gtr 1 set a=!_%n%!
set var=%var%%a%
if defined str goto lp
echo %var%&set var=




批处理之家新域名:www.bathome.net
2008-5-19 20:34
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: