中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-11 01:44
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [跟风娱乐一下]批处理倒序输出字符串 查看 2,209 回复 16
楼 主 [跟风娱乐一下]批处理倒序输出字符串 发表于 2008-06-20 17:46 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
test.txt的内容:
~!@#$%^&*()_+{}|:"<>? `1234567890-=\;',./


要求输出结果:
/.,';\]

总感觉自己的代码太长了,看看高人们有什么先进的方法。

[ Last edited by HAT on 2008-8-30 at 11:22 AM ]
2 发表于 2008-06-20 18:02 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
18年会员
UID 115804
性别 男
状态 离线
特殊字符。。。特殊字符!~
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
3 发表于 2008-06-20 18:06 ·  中国 山东 潍坊 联通
初级用户
★★
积分 73
发帖 51
注册 2007-08-31 10:04
18年会员
UID 96241
性别 男
状态 离线
晕。有难度哈
4 发表于 2008-06-20 18:11 ·  中国 江苏 常州 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线

@echo off
for /f "delims=" %%i in ('findstr /n .* test.txt') do (
set "str=%%i"
setlocal enabledelayedexpansion
set str=!str:*:=!
set var=!str!
call :lp
endlocal
)
pause
goto :eof
:lp
if defined str set/a n+=1&set str=!str:~1!&goto lp
set/a n-=1
for /l %%i in (%n% -1 0) do set/p= !var:~%%i,1!<nul
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
pusofalse +8 2008-06-20 18:15
简单!简单!再简单!
5 发表于 2008-06-20 18:19 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
其实只要看过namejm的最大原样输出文本内容,并理解了其中的精髓,那么这道题就不难了。不知hat兄以为如何?
批处理之家新域名:www.bathome.net
6 发表于 2008-06-20 18:38 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
18年会员
UID 115804
性别 男
状态 离线
希望zw19750516前辈把namejm版主的那篇帖子发上来,让我等新手学习学习。。。搜索了,没找到。。。。
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
7 发表于 2008-06-20 18:41 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
Originally posted by pusofalse at 2008-6-20 18:38:
希望zw19750516前辈把namejm版主的那篇帖子发上来,让我等新手学习学习。。。搜索了,没找到。。。。

http://www.cn-dos.net/forum/viewthread.php?tid=30815&fpage=1&highlight=%2Bnamejm
批处理之家新域名:www.bathome.net
8 发表于 2008-06-20 18:46 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
18年会员
UID 115804
性别 男
状态 离线
谢谢。
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
9 发表于 2008-06-20 19:24 ·  中国 湖北 武汉 联通
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线
sed "/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//" test.txt

Comes from <<sed1line>>.
10 发表于 2008-06-20 20:22 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
Originally posted by zw19750516 at 2008-6-20 06:19 PM:
其实只要看过namejm的最大原样输出文本内容,并理解了其中的精髓,那么这道题就不难了。不知hat兄以为如何?

其实我就是这样做的,呵呵。只是想看看还有没有其他方法。
@echo off
for /f "delims=" %%i in ('findstr /n .* test.txt') do (
set "str=%%i"
setlocal enabledelayedexpansion
set str=!str:*:=!
set strbak=!str!
call :reverse
endlocal
)
goto :eof

:reverse
ping -n 1 127.1>nul
if defined strbak (
set /p= !strbak:~-1!<nul
set strbak=!strbak:~0,-1!
goto :reverse
)
echo.
goto :eof
11 发表于 2008-06-21 03:46 ·  美国 惠普HP
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
Originally posted by lxmxn at 2008-6-20 07:24 PM:
sed "/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//" test.txt

Comes from <<sed1line>>.

我来贴一遍waker斑竹的解释吧,呵呵。
#反转一行中每个字符的顺序(类似"rev")
sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'
###假设一行文字是 123
###那么执行后模式空间中的内容应该按下边的顺序变化
执行/\n/!G;得
123\n
然后s/\(.\)\(.*\n\)/&\2\1/;

123\n23\n1
执行//D
23\n1
因为是D命令所以从头循环
模式空间有\n
所以/\n/!G;中G不执行
再来s...
23\n3\n21
再D
3\n21
循环,G不执行
再来s...
3\n\n321
再D
\n321
循环
G和s和D都不执行
执行最后的s/.//
321
12 发表于 2008-09-18 19:29 ·  中国 江西 鹰潭 电信
初级用户
积分 31
发帖 14
注册 2007-07-31 12:46
19年会员
UID 94360
性别 男
状态 离线
@echo off
for /f "delims=" %%i in ('findstr /n .* test.txt') do (
set "str=%%i"
setlocal enabledelayedexpansion
set str=!str:*:=!
set var=!str!
call :lp
endlocal
)
pause
goto :eof
:lp
if defined str set/a n+=1&set str=!str:~1!&goto lp
set/a n-=1
for /l %%i in (%n% -1 0) do set/p= !var:~%%i,1!<nul

不知道这段代码可否指定反向后的字符 输出到一个文本里
13 发表于 2008-09-18 20:21 ·  中国 江苏 苏州 电信
初级用户
★★
积分 195
发帖 93
注册 2006-10-28 08:20
19年会员
UID 68626
性别 男
状态 离线
来段awk的

{
nb=""
re=""
nb=split ($0,ww,"")
for (i=nb;i>0;i--)
{re=re ww
}
print re
}
14 发表于 2008-09-19 01:30 ·  中国 江西 鹰潭 月湖区 电信
初级用户
积分 31
发帖 14
注册 2007-07-31 12:46
19年会员
UID 94360
性别 男
状态 离线
楼上的代码看不懂
15 Re 14楼 发表于 2008-09-19 09:49 ·  美国 惠普HP
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
就是把字符串存放到一个数组里面,然后通过数组下标的控制实现倒序输出。具体的语法可以看看gawk的帮助。
论坛跳转: