中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-11 02:33
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行
DOS批处理 & 脚本技术(批处理室) » [跟风娱乐一下]批处理倒序输出字符串
可打印版本  2,212 / 16
第1楼 HAT 发表于 2008-06-20 17:46
版主 发帖 5,017 积分 9,023
[跟风娱乐一下]批处理倒序输出字符串
test.txt的内容:
~!@#$%^&*()_+{}|:"<>? `1234567890-=\;',./


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

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

[ Last edited by HAT on 2008-8-30 at 11:22 AM ]
第2楼 pusofalse 发表于 2008-06-20 18:02
银牌会员 发帖 646 积分 1,604
特殊字符。。。特殊字符!~
第3楼 hackerscans 发表于 2008-06-20 18:06
初级用户 发帖 51 积分 73
晕。有难度哈
第4楼 terse 发表于 2008-06-20 18:11
银牌会员 发帖 946 积分 2,404
第5楼 bat-zw 发表于 2008-06-20 18:19
金牌会员 发帖 1,276 积分 3,105
其实只要看过namejm的最大原样输出文本内容,并理解了其中的精髓,那么这道题就不难了。不知hat兄以为如何?
第6楼 pusofalse 发表于 2008-06-20 18:38
银牌会员 发帖 646 积分 1,604
希望zw19750516前辈把namejm版主的那篇帖子发上来,让我等新手学习学习。。。搜索了,没找到。。。。
第7楼 bat-zw 发表于 2008-06-20 18:41
金牌会员 发帖 1,276 积分 3,105
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
第8楼 pusofalse 发表于 2008-06-20 18:46
银牌会员 发帖 646 积分 1,604
谢谢。
第9楼 lxmxn 发表于 2008-06-20 19:24
版主 发帖 4,938 积分 11,386

Comes from <<sed1line>>.
第10楼 HAT 发表于 2008-06-20 20:22
版主 发帖 5,017 积分 9,023
Originally posted by zw19750516 at 2008-6-20 06:19 PM:
其实只要看过namejm的最大原样输出文本内容,并理解了其中的精髓,那么这道题就不难了。不知hat兄以为如何?

其实我就是这样做的,呵呵。只是想看看还有没有其他方法。
第11楼 HAT 发表于 2008-06-21 03:46
版主 发帖 5,017 积分 9,023
Originally posted by lxmxn at 2008-6-20 07:24 PM:

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楼 recallshan 发表于 2008-09-18 19:29
初级用户 发帖 14 积分 31
@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楼 metoo 发表于 2008-09-18 20:21
初级用户 发帖 93 积分 195
来段awk的
第14楼 recallshan 发表于 2008-09-19 01:30
初级用户 发帖 14 积分 31
楼上的代码看不懂
第15楼 HAT 发表于 2008-09-19 09:49
版主 发帖 5,017 积分 9,023
Re 14楼
就是把字符串存放到一个数组里面,然后通过数组下标的控制实现倒序输出。具体的语法可以看看gawk的帮助。
1 2  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023